pax_global_header00006660000000000000000000000064147732571120014523gustar00rootroot0000000000000052 comment=cca9e3f04d90488d28379afd7988754f5b90b9eb gnss-sdr-0.0.20/000077500000000000000000000000001477325711200133425ustar00rootroot00000000000000gnss-sdr-0.0.20/.clang-format000066400000000000000000000200001477325711200157050ustar00rootroot00000000000000# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2018-2024 Carles Fernandez-Prades --- Language: Cpp # BasedOnStyle: Google # More info: https://clang.llvm.org/docs/ClangFormatStyleOptions.html AccessModifierOffset: -4 AlignAfterOpenBracket: DontAlign AlignArrayOfStructures: None AlignConsecutiveAssignments: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCompound: false AlignFunctionPointers: false PadOperators: true AlignConsecutiveBitFields: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCompound: false AlignFunctionPointers: false PadOperators: false AlignConsecutiveDeclarations: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCompound: false AlignFunctionPointers: false PadOperators: true AlignConsecutiveMacros: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCompound: false AlignFunctionPointers: false PadOperators: false AlignConsecutiveShortCaseStatements: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCaseArrows: false AlignCaseColons: false AlignConsecutiveTableGenBreakingDAGArgColons: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCompound: false AlignFunctionPointers: false PadOperators: false AlignConsecutiveTableGenCondOperatorColons: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCompound: false AlignFunctionPointers: false PadOperators: false AlignConsecutiveTableGenDefinitionColons: Enabled: false AcrossEmptyLines: false AcrossComments: false AlignCompound: false AlignFunctionPointers: false PadOperators: false AlignEscapedNewlines: Left AlignOperands: Align AlignTrailingComments: Kind: Always OverEmptyLines: 0 AllowAllArgumentsOnNextLine: true AllowAllParametersOfDeclarationOnNextLine: true AllowBreakBeforeNoexceptSpecifier: Never AllowShortBlocksOnASingleLine: Never AllowShortCaseExpressionOnASingleLine: true AllowShortCaseLabelsOnASingleLine: false AllowShortCompoundRequirementOnASingleLine: true AllowShortEnumsOnASingleLine: true AllowShortFunctionsOnASingleLine: All AllowShortIfStatementsOnASingleLine: WithoutElse AllowShortLambdasOnASingleLine: All AllowShortLoopsOnASingleLine: true AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakBeforeMultilineStrings: true AttributeMacros: - __capability BinPackArguments: true BinPackParameters: true BitFieldColonSpacing: Both BraceWrapping: AfterCaseLabel: true AfterClass: true AfterControlStatement: Always AfterEnum: true AfterExternBlock: true AfterFunction: true AfterNamespace: true AfterObjCDeclaration: true AfterStruct: true AfterUnion: true BeforeCatch: true BeforeElse: true BeforeLambdaBody: false BeforeWhile: true IndentBraces: true SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: true BreakAdjacentStringLiterals: true BreakAfterAttributes: Leave BreakAfterJavaFieldAnnotations: false BreakAfterReturnType: None BreakArrays: true BreakBeforeBinaryOperators: None BreakBeforeConceptDeclarations: Always BreakBeforeBraces: GNU BreakBeforeInlineASMColon: OnlyMultiline BreakBeforeTernaryOperators: true BreakConstructorInitializers: BeforeColon BreakFunctionDefinitionParameters: false BreakInheritanceList: BeforeColon BreakStringLiterals: true BreakTemplateDeclarations: MultiLine ColumnLimit: 0 CommentPragmas: '^ IWYU pragma:' CompactNamespaces: false ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 4 Cpp11BracedListStyle: true DerivePointerAlignment: true DisableFormat: false EmptyLineAfterAccessModifier: Never EmptyLineBeforeAccessModifier: LogicalBlock ExperimentalAutoDetectBinPacking: false FixNamespaceComments: true ForEachMacros: - foreach - Q_FOREACH - BOOST_FOREACH IfMacros: - KJ_IF_MAYBE IncludeBlocks: Merge IncludeCategories: - Regex: '^.*.h"' Priority: 1 SortPriority: 0 CaseSensitive: false - Regex: '^.*(benchmark|boost|gflags|glog|gnsssdr|gnuradio|gnsstk|gsl|gtest|pmt|uhd|volk)/' Priority: 2 SortPriority: 0 CaseSensitive: false - Regex: '^.*(armadillo|iio|matio|pugixml)' Priority: 2 SortPriority: 0 CaseSensitive: false - Regex: '.*' Priority: 3 SortPriority: 0 CaseSensitive: false - Regex: '^<.*\.h>' Priority: 4 SortPriority: 0 CaseSensitive: false - Regex: '^<.*' Priority: 5 SortPriority: 0 CaseSensitive: false IncludeIsMainRegex: '(Test)?$' IncludeIsMainSourceRegex: '' IndentAccessModifiers: false IndentCaseBlocks: false IndentCaseLabels: false IndentExternBlock: AfterExternBlock IndentGotoLabels: true IndentPPDirectives: None IndentRequiresClause: true IndentWidth: 4 IndentWrappedFunctionNames: false InsertBraces: false InsertNewlineAtEOF: false InsertTrailingCommas: None IntegerLiteralSeparator: Binary: 0 BinaryMinDigits: 0 Decimal: 0 DecimalMinDigits: 0 Hex: 0 HexMinDigits: 0 JavaScriptQuotes: Leave JavaScriptWrapImports: true KeepEmptyLines: AtEndOfFile: false AtStartOfBlock: false AtStartOfFile: true LambdaBodyIndentation: Signature LineEnding: DeriveLF MacroBlockBegin: '' MacroBlockEnd: '' MainIncludeChar: Quote MaxEmptyLinesToKeep: 2 NamespaceIndentation: None ObjCBinPackProtocolList: Auto ObjCBlockIndentWidth: 2 ObjCBreakBeforeNestedBlockParam: true ObjCSpaceAfterProperty: false ObjCSpaceBeforeProtocolList: false PackConstructorInitializers: NextLine PenaltyBreakAssignment: 2 PenaltyBreakBeforeFirstCallParameter: 1 PenaltyBreakComment: 300 PenaltyBreakFirstLessLess: 120 PenaltyBreakOpenParenthesis: 0 PenaltyBreakScopeResolution: 500 PenaltyBreakString: 1000 PenaltyBreakTemplateDeclaration: 10 PenaltyExcessCharacter: 1000000 PenaltyIndentedWhitespace: 0 PenaltyReturnTypeOnItsOwnLine: 200 PointerAlignment: Left PPIndentWidth: -1 QualifierAlignment: Leave ReferenceAlignment: Pointer ReflowComments: true RemoveBracesLLVM: false RemoveParentheses: Leave RemoveSemicolon: false RequiresClausePosition: OwnLine RequiresExpressionIndentation: OuterScope SeparateDefinitionBlocks: Leave ShortNamespaceLines: 1 SkipMacroDefinitionBody: false SortIncludes: CaseSensitive SortJavaStaticImport: Before SortUsingDeclarations: LexicographicNumeric SpaceAfterCStyleCast: false SpaceAfterLogicalNot: false SpaceAfterTemplateKeyword: true SpaceAroundPointerQualifiers: Default SpaceBeforeAssignmentOperators: true SpaceBeforeCaseColon: false SpaceBeforeCpp11BracedList: false SpaceBeforeCtorInitializerColon: true SpaceBeforeInheritanceColon: true SpaceBeforeJsonColon: false SpaceBeforeParens: ControlStatements SpaceBeforeParensOptions: AfterControlStatements: true AfterForeachMacros: true AfterFunctionDefinitionName: false AfterFunctionDeclarationName: false AfterIfMacros: true AfterOverloadedOperator: false AfterPlacementOperator: true AfterRequiresInClause: false AfterRequiresInExpression: false BeforeNonEmptyParentheses: false SpaceBeforeRangeBasedForLoopColon: true SpaceBeforeSquareBrackets: false SpaceInEmptyBlock: false SpacesBeforeTrailingComments: 2 SpacesInAngles: Never SpacesInContainerLiterals: true SpacesInLineCommentPrefix: Minimum: 1 Maximum: -1 SpacesInParens: Never SpacesInParensOptions: ExceptDoubleParentheses: false InCStyleCasts: false InConditionalStatements: false InEmptyParentheses: false Other: false SpacesInSquareBrackets: false Standard: Auto StatementAttributeLikeMacros: - Q_EMIT StatementMacros: - Q_UNUSED - QT_REQUIRE_VERSION TableGenBreakInsideDAGArg: DontBreak TabWidth: 8 UseTab: Never VerilogBreakBetweenInstancePorts: true WhitespaceSensitiveMacros: - BOOST_PP_STRINGIZE - CF_SWIFT_NAME - NS_SWIFT_NAME - PP_STRINGIZE - STRINGIZE ... gnss-sdr-0.0.20/.clang-tidy000066400000000000000000000415751477325711200154120ustar00rootroot00000000000000# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2018-2020 Carles Fernandez-Prades --- Checks: '-*, boost-use-to-string, bugprone-argument-comment, bugprone-assert-side-effect, bugprone-bool-pointer-implicit-conversion, bugprone-copy-constructor-init, bugprone-dangling-handle, bugprone-exception-escape, bugprone-fold-init-type, bugprone-forward-declaration-namespace, bugprone-forwarding-reference-overload, bugprone-inaccurate-erase, bugprone-incorrect-roundings, bugprone-integer-division, bugprone-lambda-function-name, bugprone-macro-parentheses, bugprone-macro-repeated-side-effects, bugprone-misplaced-operator-in-strlen-in-alloc, bugprone-misplaced-widening-cast, bugprone-move-forwarding-reference, bugprone-multiple-statement-macro, bugprone-parent-virtual-call, bugprone-redundant-branch-condition, bugprone-reserved-identifier, bugprone-sizeof-container, bugprone-sizeof-expression, bugprone-string-constructor, bugprone-string-integer-assignment, bugprone-string-literal-with-embedded-nul, bugprone-suspicious-enum-usage, bugprone-suspicious-memset-usage, bugprone-suspicious-missing-comma, bugprone-suspicious-semicolon, bugprone-suspicious-string-compare, bugprone-swapped-arguments, bugprone-terminating-continue, bugprone-throw-keyword-missing, bugprone-too-small-loop-variable, bugprone-undefined-memory-manipulation, bugprone-undelegated-constructor, bugprone-unused-raii, bugprone-unused-return-value, bugprone-use-after-move, bugprone-virtual-near-miss, cert-dcl21-cpp, cert-dcl58-cpp, cert-env33-c, cert-err52-cpp, cert-err60-cpp, cert-flp30-c, cert-msc50-cpp, cert-msc51-cpp, clang-analyzer-cplusplus.*, clang-analyzer-optin.performance.*, clang-analyzer-optin.portability.UnixAPI, clang-analyzer-security.*, cppcoreguidelines-prefer-member-initializer, cppcoreguidelines-pro-type-cstyle-cast, cppcoreguidelines-pro-type-static-cast-downcast, cppcoreguidelines-slicing, cppcoreguidelines-special-member-functions, google-build-namespaces, google-global-names-in-headers, google-runtime-int, hicpp-exception-baseclass, hicpp-explicit-conversions, hicpp-noexcept-move, misc-misplaced-const, misc-new-delete-overloads, misc-non-copyable-objects, misc-redundant-expression, misc-static-assert, misc-throw-by-value-catch-by-reference, misc-uniqueptr-reset-release, misc-unused-using-decls, modernize-avoid-bind, modernize-use-default-member-init, modernize-deprecated-headers, modernize-loop-convert, modernize-raw-string-literal, modernize-redundant-void-arg, modernize-return-braced-init-list, modernize-shrink-to-fit, modernize-use-auto, modernize-use-bool-literals, modernize-use-emplace, modernize-use-equals-default, modernize-use-equals-delete, modernize-use-noexcept, modernize-use-nullptr, modernize-use-override, performance-faster-string-find, performance-for-range-copy, performance-implicit-conversion-in-loop, performance-inefficient-algorithm, performance-inefficient-string-concatenation, performance-inefficient-vector-operation, performance-move-const-arg, performance-move-constructor-init, performance-noexcept-move-constructor, performance-type-promotion-in-math-fn, performance-unnecessary-copy-initialization, performance-unnecessary-value-param, readability-avoid-const-params-in-decls, readability-braces-around-statements, readability-container-size-empty, readability-identifier-naming, readability-inconsistent-declaration-parameter-name, readability-isolate-declaration, readability-make-member-function-const, readability-named-parameter, readability-non-const-parameter, readability-qualified-auto, readability-redundant-control-flow, readability-redundant-member-init, readability-string-compare, readability-uppercase-literal-suffix' WarningsAsErrors: '' HeaderFilterRegex: '' FormatStyle: 'file' CheckOptions: - key: performance-unnecessary-copy-initialization.ExcludedContainerTypes value: '' - key: modernize-replace-auto-ptr.IncludeStyle value: llvm - key: performance-move-const-arg.CheckTriviallyCopyableMove value: 'true' - key: modernize-use-auto.MinTypeNameLength value: '5' - key: bugprone-reserved-identifier.Invert value: 'false' - key: bugprone-unused-return-value.CheckedFunctions value: 'std::async; std::launder; std::remove; std::remove_if; std::unique; std::unique_ptr::release; std::basic_string::empty; std::vector::empty; std::back_inserter; std::distance; std::find; std::find_if; std::inserter; std::lower_bound; std::make_pair; std::map::count; std::map::find; std::map::lower_bound; std::multimap::equal_range; std::multimap::upper_bound; std::set::count; std::set::find; std::setfill; std::setprecision; std::setw; std::upper_bound; std::vector::at; ::bsearch; ::ferror; ::feof; ::isalnum; ::isalpha; ::isblank; ::iscntrl; ::isdigit; ::isgraph; ::islower; ::isprint; ::ispunct; ::isspace; ::isupper; ::iswalnum; ::iswprint; ::iswspace; ::isxdigit; ::memchr; ::memcmp; ::strcmp; ::strcoll; ::strncmp; ::strpbrk; ::strrchr; ::strspn; ::strstr; ::wcscmp; ::access; ::bind; ::connect; ::difftime; ::dlsym; ::fnmatch; ::getaddrinfo; ::getopt; ::htonl; ::htons; ::iconv_open; ::inet_addr; ::isascii; ::isatty; ::mmap; ::newlocale; ::openat; ::pathconf; ::pthread_equal; ::pthread_getspecific; ::pthread_mutex_trylock; ::readdir; ::readlink; ::recvmsg; ::regexec; ::scandir; ::semget; ::setjmp; ::shm_open; ::shmget; ::sigismember; ::strcasecmp; ::strsignal; ::ttyname' - key: cert-dcl16-c.NewSuffixes value: 'L;LL;LU;LLU' - key: readability-identifier-naming.GetConfigPerFile value: 'true' - key: readability-inconsistent-declaration-parameter-name.Strict value: 'false' - key: modernize-use-default-member-init.UseAssignment value: 'false' - key: modernize-use-override.AllowOverrideAndFinal value: 'false' - key: modernize-loop-convert.IncludeStyle value: llvm - key: cert-str34-c.DiagnoseSignedUnsignedCharComparisons value: 'false' - key: misc-uniqueptr-reset-release.IncludeStyle value: llvm - key: bugprone-suspicious-string-compare.WarnOnLogicalNotComparison value: 'false' - key: readability-identifier-naming.AggressiveDependentMemberLookup value: 'false' - key: bugprone-suspicious-string-compare.WarnOnImplicitComparison value: 'true' - key: modernize-use-emplace.TupleTypes value: 'std::pair;std::tuple' - key: modernize-use-emplace.TupleMakeFunctions value: 'std::make_pair;std::make_tuple' - key: bugprone-argument-comment.CommentNullPtrs value: '0' - key: bugprone-argument-comment.StrictMode value: '0' - key: modernize-loop-convert.MakeReverseRangeHeader value: '' - key: modernize-use-bool-literals.IgnoreMacros value: 'true' - key: google-readability-namespace-comments.ShortNamespaceLines value: '10' - key: bugprone-suspicious-string-compare.StringCompareLikeFunctions value: '' - key: modernize-avoid-bind.PermissiveParameterList value: 'false' - key: modernize-use-override.FinalSpelling value: final - key: modernize-loop-convert.UseCxx20ReverseRanges value: 'true' - key: modernize-use-noexcept.ReplacementString value: '' - key: cppcoreguidelines-prefer-member-initializer.UseAssignment value: 'false' - key: performance-type-promotion-in-math-fn.IncludeStyle value: llvm - key: modernize-loop-convert.NamingStyle value: CamelCase - key: bugprone-suspicious-missing-comma.SizeThreshold value: '5' - key: readability-inconsistent-declaration-parameter-name.IgnoreMacros value: 'true' - key: performance-for-range-copy.WarnOnAllAutoCopies value: 'false' - key: bugprone-argument-comment.CommentIntegerLiterals value: '0' - key: google-runtime-int.UnsignedTypePrefix value: uint - key: modernize-loop-convert.MakeReverseRangeFunction value: '' - key: readability-identifier-naming.IgnoreFailedSplit value: 'false' - key: modernize-pass-by-value.IncludeStyle value: llvm - key: readability-qualified-auto.AddConstToQualified value: 'true' - key: bugprone-sizeof-expression.WarnOnSizeOfThis value: 'true' - key: bugprone-string-constructor.WarnOnLargeLength value: 'true' - key: bugprone-argument-comment.CommentCharacterLiterals value: '0' - key: bugprone-too-small-loop-variable.MagnitudeBitsUpperLimit value: '16' - key: bugprone-argument-comment.CommentFloatLiterals value: '0' - key: google-global-names-in-headers.HeaderFileExtensions value: ';h;hh;hpp;hxx' - key: readability-uppercase-literal-suffix.IgnoreMacros value: 'true' - key: modernize-use-nullptr.NullMacros value: 'NULL' - key: bugprone-suspicious-enum-usage.StrictMode value: 'false' - key: performance-unnecessary-copy-initialization.AllowedTypes value: '' - key: bugprone-suspicious-missing-comma.MaxConcatenatedTokens value: '5' - key: misc-throw-by-value-catch-by-reference.CheckThrowTemporaries value: 'true' - key: bugprone-string-constructor.LargeLengthThreshold value: '8388608' - key: cppcoreguidelines-special-member-functions.AllowMissingMoveFunctions value: 'false' - key: cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField value: 'false' - key: bugprone-exception-escape.FunctionsThatShouldNotThrow value: '' - key: performance-inefficient-vector-operation.EnableProto value: 'false' - key: bugprone-argument-comment.CommentStringLiterals value: '0' - key: modernize-loop-convert.MaxCopySize value: '16' - key: google-build-namespaces.HeaderFileExtensions value: ';h;hh;hpp;hxx' - key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors value: 'true' - key: performance-for-range-copy.AllowedTypes value: '' - key: modernize-use-override.IgnoreDestructors value: 'false' - key: bugprone-sizeof-expression.WarnOnSizeOfConstant value: 'true' - key: modernize-use-emplace.ContainersWithPushBack value: 'std::vector;std::list;std::deque' - key: bugprone-argument-comment.CommentBoolLiterals value: '0' - key: readability-braces-around-statements.ShortStatementLines value: '0' - key: bugprone-argument-comment.CommentUserDefinedLiterals value: '0' - key: modernize-use-override.OverrideSpelling value: override - key: performance-inefficient-string-concatenation.StrictMode value: 'false' - key: google-readability-braces-around-statements.ShortStatementLines value: '1' - key: google-runtime-int.TypeSuffix value: _t - key: bugprone-reserved-identifier.AllowedIdentifiers value: '_pb;_pbi' - key: modernize-use-emplace.IgnoreImplicitConstructors value: 'false' - key: modernize-use-equals-delete.IgnoreMacros value: 'true' - key: bugprone-misplaced-widening-cast.CheckImplicitCasts value: 'false' - key: readability-uppercase-literal-suffix.NewSuffixes value: '' - key: modernize-loop-convert.MinConfidence value: reasonable - key: performance-unnecessary-value-param.AllowedTypes value: '' - key: bugprone-suspicious-missing-comma.RatioThreshold value: '0.200000' - key: cppcoreguidelines-special-member-functions.AllowMissingMoveFunctionsWhenCopyIsDeleted value: 'false' - key: modernize-use-noexcept.UseNoexceptFalse value: 'true' - key: google-readability-namespace-comments.SpacesBeforeComments value: '2' - key: misc-throw-by-value-catch-by-reference.MaxSize value: '64' - key: cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic value: 'true' - key: bugprone-argument-comment.IgnoreSingleArgument value: '0' - key: bugprone-sizeof-expression.WarnOnSizeOfIntegerExpression value: 'false' - key: performance-faster-string-find.StringLikeClasses value: 'std::basic_string;std::basic_string_view' - key: bugprone-assert-side-effect.CheckFunctionCalls value: 'false' - key: bugprone-string-constructor.StringNames value: '::std::basic_string;::std::basic_string_view' - key: bugprone-assert-side-effect.AssertMacros value: assert - key: bugprone-exception-escape.IgnoredExceptions value: '' - key: modernize-use-default-member-init.IgnoreMacros value: 'true' - key: llvm-qualified-auto.AddConstToQualified value: 'false' - key: readability-identifier-naming.IgnoreMainLikeFunctions value: 'false' - key: google-runtime-int.SignedTypePrefix value: int - key: google-readability-function-size.StatementThreshold value: '800' - key: llvm-else-after-return.WarnOnConditionVariables value: 'false' - key: cert-msc51-cpp.DisallowedSeedTypes value: 'time_t,std::time_t' - key: bugprone-sizeof-expression.WarnOnSizeOfCompareToConstant value: 'true' - key: bugprone-reserved-identifier.AggressiveDependentMemberLookup value: 'false' - key: modernize-raw-string-literal.DelimiterStem value: lit - key: modernize-use-equals-default.IgnoreMacros value: 'true' - key: misc-throw-by-value-catch-by-reference.WarnOnLargeObjects value: 'false' - key: cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor value: 'false' - key: modernize-raw-string-literal.ReplaceShorterLiterals value: 'false' - key: modernize-use-emplace.SmartPointers value: 'std::shared_ptr;std::unique_ptr;std::auto_ptr;std::weak_ptr' - key: performance-inefficient-vector-operation.VectorLikeClasses value: 'std::vector' - key: modernize-use-auto.RemoveStars value: 'false' - key: bugprone-dangling-handle.HandleClasses value: 'std::basic_string_view;std::experimental::basic_string_view' - key: performance-unnecessary-value-param.IncludeStyle value: llvm - key: readability-redundant-member-init.IgnoreBaseInCopyConstructors value: 'false' - key: llvm-else-after-return.WarnOnUnfixable value: 'false' ... gnss-sdr-0.0.20/.github/000077500000000000000000000000001477325711200147025ustar00rootroot00000000000000gnss-sdr-0.0.20/.github/DCO.txt000066400000000000000000000030171477325711200160510ustar00rootroot00000000000000Developer Certificate of Origin Version 1.1 SPDX-License-Identifier: GPL-3.0-or-later Copyright (C) 2021 Centre Tecnològic de Telecomunicacions de Catalunya (CTTC) and its contributors. Parc Mediterrani de la Tecnologia (PMT) Building B4 Av. Carl Friedrich Gauss 7 08860 - Castelldefels (Spain) Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Developer's Certificate of Origin 1.1 By making a contribution to this project, I certify that: (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. gnss-sdr-0.0.20/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000047501477325711200205110ustar00rootroot00000000000000:+1::tada: Hello, and thanks for contributing to [GNSS-SDR](https://gnss-sdr.org)! :tada::+1: [comment]: # ( SPDX-License-Identifier: GPL-3.0-or-later ) [comment]: # ( SPDX-FileCopyrightText: 2011-2021 Carles Fernandez-Prades ) Any code contributions going into GNSS-SDR will become part of a GPL-licensed, open source repository. It is therefore imperative that code submissions belong to the authors, and that submitters have the authority to merge that code into the public GNSS-SDR codebase. For that purpose, we use the [Developer's Certificate of Origin](https://github.com/gnss-sdr/gnss-sdr/blob/next/.github/DCO.txt). It is the same document used by other projects. Signing the DCO states that there are no legal reasons to not merge your code. To sign the DCO, suffix your git commits with a `Signed-off-by:` line. When using the command line, you can use `git commit -s` to automatically add this line. If there were multiple authors of the code, or other types of stakeholders, make sure that all are listed, each with a separate `Signed-off-by:` line. Before submitting your pull request, please make sure the following is done: 1. You undertake the [Contributor Covenant Code of Conduct](https://github.com/gnss-sdr/gnss-sdr/blob/main/CODE_OF_CONDUCT.md). 2. You have read the [Developer's Certificate of Origin](https://github.com/gnss-sdr/gnss-sdr/blob/next/.github/DCO.txt) and [signed your commits](https://gnss-sdr.org/docs/tutorials/using-git/#sign-your-commits) as an indication of fulfillment. 3. You have read the [Contributing Guidelines](https://github.com/gnss-sdr/gnss-sdr/blob/main/CONTRIBUTING.md). 4. You have read the [coding style guide](https://gnss-sdr.org/coding-style/). Specifically, you have read [about clang-format](https://gnss-sdr.org/coding-style/#use-tools-for-automated-code-formatting) and [about clang-tidy](https://gnss-sdr.org/coding-style/#use-code-linters), and you have applied those tools to your changes. 5. You have forked the [gnss-sdr upstream repository](https://github.com/gnss-sdr/gnss-sdr) and have created your branch from `next` (or any other currently living branch in the upstream repository). 6. Please include a description of your changes here. **Please feel free to delete this line and the above text once you have read it and in case you want to go on with your pull request, and explain your intend below.** gnss-sdr-0.0.20/.github/dependabot.yml000066400000000000000000000007621477325711200175370ustar00rootroot00000000000000# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2025 Carles Fernandez-Prades # Keep GitHub Actions up to date with GitHub's Dependabot version: 2 updates: - package-ecosystem: "github-actions" directory: "/" target-branch: next groups: github-actions: patterns: - "*" # Group all Actions updates into a single larger pull request schedule: interval: "weekly" day: "monday" time: "03:00"gnss-sdr-0.0.20/.github/workflows/000077500000000000000000000000001477325711200167375ustar00rootroot00000000000000gnss-sdr-0.0.20/.github/workflows/citation.yml000066400000000000000000000014121477325711200212720ustar00rootroot00000000000000# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2022 Carles Fernandez-Prades on: push: paths: - CITATION.cff pull_request: paths: - CITATION.cff workflow_dispatch: name: CITATION.cff jobs: Validate-CITATION-cff: runs-on: ubuntu-latest name: Validate CITATION.cff env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - name: Checkout uses: actions/checkout@v4 - name: Validate CITATION.cff uses: dieghernan/cff-validator@main # Upload artifact in case of failure - name: Update artifact uses: actions/upload-artifact@v4 if: failure() with: name: citation-cff-errors path: citation_cff_errors.md gnss-sdr-0.0.20/.github/workflows/gnss-sdr_archs.yml000066400000000000000000000055651477325711200224150ustar00rootroot00000000000000# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2023 Carles Fernandez-Prades name: Run gnss-sdr in non-x86 archs on: push: branches: - "**-archs" - main workflow_dispatch: jobs: gnss-sdr-non-x86: runs-on: ubuntu-latest name: ${{ matrix.distro }} ${{ matrix.arch }} ${{ matrix.compiler.name }} # Run steps on a matrix of archs. strategy: fail-fast: false matrix: include: - arch: aarch64 distro: ubuntu22.04 compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } - arch: aarch64 distro: ubuntu22.04 compiler: { name: clang-14, cc: clang-14, cxx: clang++-14 } - arch: armv7 distro: ubuntu22.04 compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } - arch: riscv64 distro: ubuntu22.04 compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } # - arch: ppc64le # distro: ubuntu22.04 # compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } # - arch: s390x # distro: ubuntu22.04 # compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } steps: - uses: actions/checkout@v4 - uses: uraimo/run-on-arch-action@v3.0.0 name: Test in non-x86 container continue-on-error: ${{ contains(fromJson('["ppc64le", "s390x"]'), matrix.arch) }} id: test with: arch: ${{ matrix.arch }} distro: ${{ matrix.distro }} githubToken: ${{ github.token }} # Not required, but speeds up builds setup: | mkdir -p "${PWD}/testing" dockerRunArgs: | --volume "${PWD}:/gnss-sdr" env: | CC: ${{ matrix.compiler.cc }} CXX: ${{ matrix.compiler.cxx }} shell: /bin/sh install: | apt update apt install -y ${{ matrix.compiler.name }} git ninja-build cmake \ libboost-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev \ libboost-thread-dev libboost-chrono-dev libboost-serialization-dev \ liblog4cpp5-dev gnuradio-dev gr-osmosdr libpugixml-dev libpcap-dev libblas-dev \ liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev \ libgnutls-openssl-dev libmatio-dev googletest protobuf-compiler libprotobuf-dev \ python3-mako liborc-0.4-dev run: | git config --global --add safe.directory /gnss-sdr cd /gnss-sdr cd testing mkdir install cmake -DENABLE_SYSTEM_TESTING_EXTRA=ON -DCMAKE_INSTALL_PREFIX=/gnss-sdr/testing/install -DENABLE_INSTALL_TESTS=ON .. echo "Build with $(nproc) thread(s)" make -j$(nproc) make install cd install/bin ./position_test gnss-sdr-0.0.20/.github/workflows/main.yml000066400000000000000000000263671477325711200204240ustar00rootroot00000000000000# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2020-2024 Carles Fernandez-Prades name: Simple CI on: pull_request: paths-ignore: - "**/CITATION.cff" push: paths-ignore: - "**/CITATION.cff" workflow_dispatch: jobs: build-ubuntu: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: install dependencies run: | sudo apt update sudo apt install -y libunwind-dev sudo apt install -y --no-install-recommends ninja-build cmake \ libboost-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev \ libboost-thread-dev libboost-chrono-dev libboost-serialization-dev \ liblog4cpp5-dev gnuradio-dev gr-osmosdr libpugixml-dev libpcap-dev libblas-dev \ liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev \ libgnutls-openssl-dev libmatio-dev googletest protobuf-compiler libprotobuf-dev \ python3-mako liborc-0.4-dev - name: configure run: cmake -S . -B build -GNinja - name: build run: cmake --build build - name: check run: cmake --build build --target check && ./install/volk_gnsssdr_profile && ./install/run_tests - name: default position_test run: | cmake -S . -B build -DENABLE_SYSTEM_TESTING_EXTRA=ON -DENABLE_UNIT_TESTING_EXTRA=OFF && \ cmake --build build && ./install/position_test && ./install/run_tests --gtest_filter=Osnma* build-macos: runs-on: macos-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.12' - name: install dependencies run: | brew update rm /usr/local/bin/2to3 || true rm /usr/local/bin/idle3 || true rm /usr/local/bin/pydoc3 || true rm /usr/local/bin/python3 || true rm /usr/local/bin/python3-config || true rm /usr/local/bin/2to3-3.1* || true rm /usr/local/bin/idle3.1* || true rm /usr/local/bin/pydoc3.1* || true rm /usr/local/bin/python3.1* || true export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew link --overwrite python@3.12 brew install ninja hdf5 automake armadillo lapack libmatio gnuradio openssl pugixml protobuf boost pip3 install mako - name: configure run: cmake -S . -B build -GNinja - name: build run: cmake --build build - name: check run: cmake --build build --target check && ./install/volk_gnsssdr_profile && ./install/run_tests - name: default position_test run: | cmake -S . -B build -DENABLE_SYSTEM_TESTING_EXTRA=ON -DENABLE_UNIT_TESTING_EXTRA=OFF && \ cmake --build build && ./install/position_test && ./install/run_tests --gtest_filter=Osnma* build-macos-xcode: runs-on: macos-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.12' - name: install dependencies run: | brew update rm /usr/local/bin/2to3 || true rm /usr/local/bin/idle3 || true rm /usr/local/bin/pydoc3 || true rm /usr/local/bin/python3 || true rm /usr/local/bin/python3-config || true rm /usr/local/bin/2to3-3.1* || true rm /usr/local/bin/idle3.1* || true rm /usr/local/bin/pydoc3.1* || true rm /usr/local/bin/python3.1* || true export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew link --overwrite python@3.12 brew install ninja pkg-config hdf5 automake armadillo lapack libmatio gnuradio openssl pugixml protobuf boost pip3 install mako - name: configure run: cmake -S . -B build -GXcode - name: build run: cmake --build build --config Release - name: check run: | cmake --build build --config Release --target check ./install/volk_gnsssdr_profile ./install/run_tests - name: default position_test run: | cmake -S . -B build -DENABLE_SYSTEM_TESTING_EXTRA=ON -DENABLE_UNIT_TESTING_EXTRA=OFF cmake --build build --config Release --target position_test ./install/position_test ./install/run_tests --gtest_filter=Osnma* clang-format: runs-on: ubuntu-latest strategy: matrix: path: - 'src' - 'tests' - 'utils' steps: - uses: actions/checkout@v4 - name: run clang-format uses: jidicula/clang-format-action@v4.14.0 with: clang-format-version: "19" check-path: ${{ matrix.path }} exclude-regex: '(libs\/gsl\/)|(tmpl)|(cpu_features)|^.*\.(cu|proto)$' clang-tidy: runs-on: macos-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.12' - name: install dependencies run: | brew update rm /usr/local/bin/2to3 || true rm /usr/local/bin/idle3 || true rm /usr/local/bin/pydoc3 || true rm /usr/local/bin/python3 || true rm /usr/local/bin/python3-config || true rm /usr/local/bin/2to3-3.1* || true rm /usr/local/bin/idle3.1* || true rm /usr/local/bin/pydoc3.1* || true rm /usr/local/bin/python3.1* || true export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew link --overwrite python@3.12 brew install ninja pkg-config hdf5 automake armadillo lapack libmatio gnuradio openssl pugixml protobuf llvm boost pip3 install mako ln -s $(brew --prefix llvm)/bin/clang-tidy /usr/local/bin ln -s $(brew --prefix llvm)/bin/clang-apply-replacements /usr/local/bin ln -s $(brew --prefix llvm)/bin/run-clang-tidy.py /usr/local/bin - name: Prepare run run: cmake -S . -B build && cmake --build build --target volk_gnsssdr_module gtest-1.16.0 core_monitor core_libs pvt_libs - name: run clang-tidy run: cd build && /opt/homebrew/opt/llvm/bin/run-clang-tidy -fix - name: check run: | git diff > clang_tidy.patch echo -e "if \n [ -s clang_tidy.patch ] \nthen \n echo "clang_tidy not applied:"; echo ""; more clang_tidy.patch; exit 1 \nfi \n" > detect chmod +x ./detect ./detect cpplint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: install dependencies run: sudo apt install python3-pip && sudo pip3 install cpplint - name: run checks run: "find ./src/ ./utils ./tests -iname *.h -o -iname *.cc | xargs cpplint --filter=-,+build/class,+build/deprecated,+build/explicit_make_pair,\ +build/forward_decl,+build/printf_format,+build/storage_class,\ +readability/constructors,+readability/namespace,+readability/newline,\ +readability/utf8,+runtime/casting,+runtime/explicit,\ +runtime/indentation_namespace,+runtime/init,+runtime/invalid_increment,\ +runtime/member_string_references,+runtime/memset,+runtime/operator,\ +runtime/printf,+runtime/printf_format,+whitespace/blank_line,\ +whitespace/comma,+whitespace/comments,+whitespace/empty_conditional_body,\ +whitespace/end-of-line,+whitespace/ending-newline,+whitespace/semicolon,\ +whitespace/tab --exclude=./src/core/interfaces/gnss_block_interface.h --exclude=./src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cpu_features/test/hwcaps_for_testing.* --exclude=./utils/nav-listener/build/nav_message.pb.h" prettier-markdown: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: install dependencies run: sudo npm install --global prettier - name: check markdown run: find . -iname "*.md" | xargs prettier --parser markdown --print-width 80 --prose-wrap always --list-different cmakelint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: install dependencies run: | sudo pip install cmakelint - name: check CMake scripts run: find . -iname "CMakeLists.txt" -o -iname "*.cmake" | xargs cmakelint --filter=-linelength,-readability/wonkycase volk-gnsssdr-windows: runs-on: windows-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install dependencies run: | python -m pip install --upgrade pip pip install mako - name: configure shell: powershell run: cmake -S src\algorithms\libs\volk_gnsssdr_module\volk_gnsssdr -B build -G "Visual Studio 17 2022" - name: build run: cmake --build build --config Release - name: test shell: powershell run: ctest -C Release --test-dir build - name: install run: cmake --install build - name: run profile run: cd 'C:\Program Files (x86)\volk_gnsssdr\bin'; .\volk_gnsssdr_profile.exe volk-gnsssdr-ubuntu: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: install dependencies run: sudo apt install python3-mako liborc-dev - name: configure run: cmake -S src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr -B build - name: build run: cmake --build build - name: install run: sudo cmake --install build && sudo ldconfig - name: test run: volk_gnsssdr_profile volk-gnsssdr-macos: runs-on: macos-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install dependencies run: | python -m pip install --upgrade pip pip install mako - name: configure run: cmake -S src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr -B build - name: build run: cmake --build build && sudo cmake --install build - name: test run: ctest -C Release --test-dir build --exclude-regex volk_gnsssdr_32fc_32f_rotator_dotprodxnpuppet_32fc volk-gnsssdr-macos-xcode: runs-on: macos-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install dependencies run: | python -m pip install --upgrade pip pip install mako - name: configure run: cmake -S src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr -B build -GXcode - name: build run: cmake --build build --config Release - name: install run: sudo cmake --install build - name: test run: ctest -C Release --test-dir build --exclude-regex --exclude-regex volk_gnsssdr_32fc_32f_rotator_dotprodxnpuppet_32fc shellcheck: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: install dependencies run: sudo apt install shellcheck - name: check scripts run: shellcheck utils/scripts/* REUSE-compliance: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Check REUSE compliance uses: docker://fsfe/reuse with: args: lintgnss-sdr-0.0.20/.github/workflows/volk_gnsssdr_android.yml000066400000000000000000000050621477325711200237030ustar00rootroot00000000000000# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2022 Carles Fernandez-Prades on: push: paths: - "src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/**" - "CMakeLists.txt" pull_request: paths: - "src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/**" - "CMakeLists.txt" workflow_dispatch: name: Build volk_gnsssdr on Android NDK jobs: build: name: Build on Android NDK ${{ matrix.arch.name }} strategy: fail-fast: false matrix: arch: - { name: armeabi-v7a, allow_fail: false } - { name: arm64-v8a, allow_fail: false } - { name: x86, allow_fail: false } - { name: x86_64, allow_fail: false } runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Update repositories run: sudo apt update - name: Install dependencies run: sudo apt install -y cmake python3-mako # Setup Java - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' # Setup Android SDK, and auto-accept licenses - name: Install Android SDK run: | wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip && \ mkdir android-sdk-linux && unzip -qq android-sdk.zip -d android-sdk-linux && export ANDROID_HOME=./android-sdk-linux && echo y | $ANDROID_HOME/cmdline-tools/bin/sdkmanager --sdk_root=android-sdk-linux --update && \ (echo y; echo y; echo y; echo y; echo y; echo y; echo y; echo y) | $ANDROID_HOME/cmdline-tools/bin/sdkmanager --sdk_root=android-sdk-linux --licenses # Call SDKManager to install the Android NDK - name: Install Android NDK run: $GITHUB_WORKSPACE/android-sdk-linux/cmdline-tools/bin/sdkmanager --sdk_root=$GITHUB_WORKSPACE/android-sdk-linux --install "ndk;27.2.12479018" --channel=3 # Setup build directory - name: Setup ${{ matrix.arch.name }} shell: bash run: | cd $GITHUB_WORKSPACE/ && mkdir -p build && cd build && \ cmake -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/android-sdk-linux/ndk/27.2.12479018/build/cmake/android.toolchain.cmake -DANDROID_ABI=${{ matrix.arch.name }} -DANDROID_PLATFORM=android-34 ../src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr # Build - name: Build ${{ matrix.arch.name }} shell: bash run: cd $GITHUB_WORKSPACE/build && make continue-on-error: ${{ matrix.arch.allow_fail }} gnss-sdr-0.0.20/.github/workflows/volk_gnsssdr_archs.yml000066400000000000000000000055641477325711200233720ustar00rootroot00000000000000# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2023 Carles Fernandez-Prades name: Run gnss-sdr in non-x86 archs on: push: branches: - "**-archs" - main workflow_dispatch: jobs: gnss-sdr-non-x86: runs-on: ubuntu-latest name: ${{ matrix.distro }} ${{ matrix.arch }} ${{ matrix.compiler.name }} # Run steps on a matrix of archs. strategy: fail-fast: false matrix: include: - arch: aarch64 distro: ubuntu22.04 compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } - arch: aarch64 distro: ubuntu22.04 compiler: { name: clang-14, cc: clang-14, cxx: clang++-14 } - arch: armv7 distro: ubuntu22.04 compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } - arch: riscv64 distro: ubuntu22.04 compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } # - arch: ppc64le # distro: ubuntu22.04 # compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } # - arch: s390x # distro: ubuntu22.04 # compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } steps: - uses: actions/checkout@v4 - uses: uraimo/run-on-arch-action@v3.0.0 name: Test in non-x86 container continue-on-error: ${{ contains(fromJson('["ppc64le", "s390x"]'), matrix.arch) }} id: test with: arch: ${{ matrix.arch }} distro: ${{ matrix.distro }} githubToken: ${{ github.token }} # Not required, but speeds up builds setup: | mkdir -p "${PWD}/testing" dockerRunArgs: | --volume "${PWD}:/gnss-sdr" env: | CC: ${{ matrix.compiler.cc }} CXX: ${{ matrix.compiler.cxx }} shell: /bin/sh install: | apt update apt install -y ${{ matrix.compiler.name }} git ninja-build cmake \ libboost-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev \ libboost-thread-dev libboost-chrono-dev libboost-serialization-dev \ liblog4cpp5-dev gnuradio-dev gr-osmosdr libpugixml-dev libpcap-dev libblas-dev \ liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev \ libgnutls-openssl-dev libmatio-dev googletest protobuf-compiler libprotobuf-dev \ python3-mako liborc-0.4-dev run: | git config --global --add safe.directory /gnss-sdr cd /gnss-sdr cd testing mkdir install cmake -DENABLE_SYSTEM_TESTING_EXTRA=ON -DCMAKE_INSTALL_PREFIX=/gnss-sdr/testing/install -DENABLE_INSTALL_TESTS=ON .. echo "Build with $(nproc) thread(s)" make -j$(nproc) make install cd install/bin ./position_testgnss-sdr-0.0.20/.gitignore000066400000000000000000000007451477325711200153400ustar00rootroot00000000000000# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2011-2024 Carles Fernandez-Prades *~ .*.swp /build/ /build*/ /cmake-build-debug/ /data/ /docs/doxygen/Doxyfile /docs/html/ /docs/latex/ /docs/GNSS-SDR_manual.pdf /gnss_sdr_pvt.nmea /GSDR* /HAS_* /PVT_* /Testing/ /tests/data/output.dat /thirdparty/ /utils/nav-listener/build/ /utils/nav-listener/build*/ /install .cproject .DS_Store .idea .project .pydevproject .settings .vs/ .vscode/ gnss-sdr-0.0.20/AUTHORS000066400000000000000000000077661477325711200144320ustar00rootroot00000000000000GNSS-SDR Authorship -------------------------------------------------------------------------------- The GNSS-SDR project is hosted and sponsored by the Centre Tecnològic de Telecomunicacions de Catalunya (CTTC), a non-profit research foundation located in Castelldefels (41.27504 N, 1.987709 E), 20 km south of Barcelona, Spain. GNSS-SDR is the by-product of GNSS research conducted from the Navigation & Positioning Research Unit at CTTC, and it is the combined effort of students, aficionados, and researchers from different institutions around the World. Contact Information -------------------------------------------------------------------------------- GNSS-SDR Homepage ---------------------------- https://gnss-sdr.org CTTC Homepage ---------------------------- https://www.cttc.cat Mailing List ---------------------------- gnss-sdr-developers@lists.sourceforge.net https://sourceforge.net/projects/gnss-sdr/lists/gnss-sdr-developers Email ---------------------------- Inquiries beyond the mailing list can be sent to carles.fernandez@cttc.cat List of authors -------------------------------------------------------------------------------- Carles Fernández-Prades carles.fernandez@cttc.cat Project manager Javier Arribas javier.arribas@cttc.es Developer Luis Esteve Elfau luis@epsilon-formacion.com Developer Marc Majoral marc.majoral@cttc.cat Developer Xavier Guerrero xavier.guerrero@cttc.es Developer Jordi Vilà-Valls jordi.vila-valls@isae-supaero.fr Consultant Pau Closas pau.closas@northeastern.edu Consultant Álvaro Cebrián Juan acebrianjuan@gmail.com Contributor Andres Cecilia Luque a.cecilia.luque@gmail.com Contributor Anthony Arnold anthony.arnold@uqconnect.edu.au Contributor Antonio Ramos antonio.ramosdet@gmail.com Contributor Carlos Avilés carlos.avilesr@googlemail.com Contributor Cesare Ghionoiu Martinez c.ghionoiu-martinez@tu-braunschweig.de Contributor Cillian O'Driscoll cillian.odriscoll@gmail.com Contributor Damian Miralles dmiralles2009@gmail.com Contributor Daniel Fehr daniel.co@bluewin.ch Contributor David Pubill david.pubill@cttc.cat Contributor En Shin seanstone5923@gmail.com Contributor Fran Fabra fabra@ice.csic.es Contributor Gabriel Araujo gabriel.araujo.5000@gmail.com Contributor Gerald LaMountain gerald@gece.neu.edu Contributor Into Pääkkönen into.paakkonen@aalto.fi Contributor Irene Pérez Riega iperrie@inta.es Contributor Jim Melton jim.melton@sncorp.com Contributor Josh Schindehette jschindehette@geontech.com Contributor Leonardo Tonetto tonetto.dev@gmail.com Contributor Malte Lenhart malte.lenhart@mailbox.org Contributor Mara Branzanti mara.branzanti@gmail.com Contributor Marc Molina marc.molina.pena@gmail.com Contributor Marc Sales marcsales92@gmail.com Contributor Piyush Gupta piyush04111999@gmail.com Contributor Rodrigo Muñoz rodrigo.munoz@proteinlab.cl Contributor Stefan van der Linden spvdlinden@gmail.com Contributor Víctor Castillo-Agüero victorcastilloaguero@gmail.com Contributor Will Silberman wsilberm@google.com Contributor Carlos Paniego carpanie@hotmail.com Artwork # SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2011-2024 Carles Fernandez-Prades gnss-sdr-0.0.20/CITATION.cff000066400000000000000000000250461477325711200152430ustar00rootroot00000000000000# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: 2024-2025 C. Fernandez-Prades carles.fernandez(at)cttc.es --- authors: - affiliation: "Centre Tecnològic de Telecomunicacions de Catalunya (CTTC)" alias: carlesfernandez email: carles.fernandez@cttc.es family-names: "Fernández-Prades" given-names: Carles orcid: "https://orcid.org/0000-0002-9201-7007" - affiliation: "Centre Tecnològic de Telecomunicacions de Catalunya (CTTC)" alias: Arribas email: javier.arribas@cttc.es family-names: Arribas given-names: Javier orcid: "https://orcid.org/0000-0001-6346-3406" - affiliation: "Centre Tecnològic de Telecomunicacions de Catalunya (CTTC)" alias: mmajoral email: marc.majoral@cttc.es family-names: Majoral given-names: Marc orcid: "https://orcid.org/0000-0001-6161-6747" - affiliation: "Centre Tecnològic de Telecomunicacions de Catalunya (CTTC)" alias: xguerreropau email: xavier.guerrero@cttc.es family-names: Guerrero given-names: Xavier - alias: Gastd email: gabriel.araujo.5000@gmail.com family-names: Araujo given-names: Gabriel - email: anthony.arnold@uqconnect.edu.au family-names: Arnold given-names: Anthony - email: carlos.avilesr@googlemail.com family-names: Avilés given-names: Carlos - alias: marabra email: mara.branzanti@gmail.com family-names: Branzanti given-names: Mara - alias: castle055 affiliation: "Instituto Nacional de Técnica Aeroespacial" email: victorcastilloaguero@gmail.com family-names: "Castillo-Agüero" given-names: Víctor - alias: acebrianjuan email: acebrianjuan@gmail.com family-names: "Cebrián-Juan" given-names: Álvaro - email: a.cecilia.luque@gmail.com family-names: "Cecilia-Luque" given-names: Andrés - alias: luis-esteve email: luis@epsilon-formacion.com family-names: Esteve given-names: Luis - email: fabra@ice.csic.es family-names: Fabra given-names: Fran - email: daniel.co@bluewin.ch family-names: Fehr given-names: Daniel - alias: cesaaargm affiliation: "Technische Universität Braunschweig" email: c.ghionoiu-martinez@tu-braunschweig.de family-names: "Ghionoiu Martinez" given-names: Cesare - alias: piyush0411 email: piyush04111999@gmail.com family-names: Gupta given-names: Piyush - alias: glamountain email: gerald@gece.neu.edu family-names: LaMountain given-names: Gerald - alias: lenhart email: malte.lenhart@mailbox.org family-names: Lenhart given-names: Malte - alias: jwmelto email: jim.melton@sncorp.com family-names: Melton given-names: Jim - alias: dmiralles2009 email: dmiralles2009@gmail.com family-names: Miralles given-names: Damian orcid: "https://orcid.org/0000-0001-5820-9569" - email: marc.molina.pena@gmail.com family-names: Molina given-names: Marc - email: rodrigo.munoz@proteinlab.cl family-names: Muñoz given-names: Rodrigo - alias: odrisci email: cillian.odriscoll@gmail.com family-names: "O'Driscoll" given-names: Cillian - affiliation: "Finnish Geospatial Research Institute" alias: IntoPa email: into.paakkonen@aalto.fi family-names: "Pääkkönen" given-names: Into - alias: Perrielornitorrinco affiliation: "Instituto Nacional de Técnica Aeroespacial" email: iperrie@inta.es given-names: Irene family-names: "Pérez Riega" - affiliation: "Centre Tecnològic de Telecomunicacions de Catalunya (CTTC)" email: david.pubill@cttc.cat family-names: Pubill given-names: David - alias: antonioramosdet family-names: Ramos given-names: Antonio - alias: seanstone email: seanstone5923@gmail.com family-names: Shin given-names: En - alias: jschindehette email: jschindehette@geontech.com family-names: Schindehette given-names: Josh - alias: orlando017 email: wsilberm@google.com family-names: Silberman given-names: Will - email: tonetto.dev@gmail.com family-names: Tonetto given-names: Leonardo - alias: stefanlinden email: spvdlinden@gmail.com family-names: "van der Linden" given-names: Stefan cff-version: "1.2.0" date-released: "2025-04-01" identifiers: - description: "The concept DOI of the work. This is a DOI always pointing to the latest stable release." type: doi value: 10.5281/zenodo.591700 keywords: - "Global Navigation Satellite System" - GNSS - "software radio" - SDR - GPS - Galileo - C++ license: GPL-3.0-or-later message: "If you use this software, please cite it using the metadata from this file." references: - authors: - family-names: "Fernández-Prades" given-names: Carles - family-names: "Vilà-Valls" given-names: Jordi - family-names: Arribas given-names: Javier - family-names: Ramos given-names: Antonio doi: 10.1109/ACCESS.2018.2822835 issue: 1 journal: "IEEE Access" pages: 13 start: 20451 end: 20463 scope: "Discussion on reproducibility in GNSS signal processing." title: "Continuous Reproducibility in GNSS Signal Processing." type: article volume: 6 year: 2018 - authors: - family-names: "Fernández-Prades" given-names: Carles - family-names: "Lo Presti" given-names: Letizia - family-names: Falleti given-names: Emanuela doi: 10.1109/JPROC.2011.2158032 issue: 11 journal: "Proceedigs of the IEEE" month: 11 pages: 23 start: 1882 end: 1904 scope: "General overview on GNSS receiver technology." title: "Satellite Radiolocalization From GPS to GNSS and Beyond: Novel Technologies and Applications for Civil Mass Market." type: article volume: 99 year: 2011 - authors: - family-names: "Fernández-Prades" given-names: Carles - family-names: Arribas given-names: Javier - family-names: Majoral given-names: Marc - family-names: Ramos given-names: Antonio - family-names: "Vilà-Valls" given-names: Jordi - family-names: Giordano given-names: Pietro conference: name: "Proc. 9th ESA Workshop on Satellite Navigation Technologies and European Workshop on GNSS Signals and Signal Processing (NAVITEC)" doi: 10.1109/NAVITEC.2018.8642697 location: name: "ESA/ESTEC, Noordwijk, Netherlands." month: 12 pages: 9 scope: "Space applications of the software-defined GNSS embeded receiver." title: "A Software-Defined Spaceborne GNSS Receiver." type: conference-paper year: 2018 - authors: - family-names: "Fernández-Prades" given-names: Carles - family-names: Pomar given-names: Christian - family-names: Arribas given-names: Javier - family-names: Fàbrega given-names: "Josep Maria" - family-names: "Vilà-Valls" given-names: Jordi - family-names: "Svaluto Moreolo" given-names: Michela - family-names: Casellas given-names: Ramon - family-names: Martínez given-names: Ricardo - family-names: Navarro given-names: Mònica - family-names: Vílchez given-names: "Francisco Javier" - family-names: Muñoz given-names: Raul - family-names: Vilalta given-names: Ricard - family-names: Nadal given-names: Laia - family-names: Mayoral given-names: Arturo conference: name: "Proc. 30th Int. Tech. Meeting Sat. Div. Inst. Navig." doi: 10.33012/2017.15234 location: name: "Portland, OR." month: 9 scope: "Introduction of the virtualized GNSS receiver." pages: 20 start: 3796 end: 3815 title: "A Cloud Optical Access Network for Virtualized GNSS Receivers" type: conference-paper year: 2017 - authors: - family-names: "Fernández-Prades" given-names: Carles - family-names: Arribas given-names: Javier - family-names: Closas given-names: Pau conference: name: "Proc. 8th ESA Workshop on Satellite Navigation Technologies and European Workshop on GNSS Signals and Signal Processing (NAVITEC)" doi: 10.1109/NAVITEC.2016.7931740 location: name: "ESA/ESTEC, Noordwijk, Netherlands." month: 12 pages: 9 scope: "Discussion on testing methodologies for software-defined GNSS receivers." title: "Assessment of Software-Defined GNSS Receivers" type: conference-paper year: 2016 - authors: - family-names: "Fernández-Prades" given-names: Carles - family-names: Arribas given-names: Javier - family-names: Closas given-names: Pau conference: name: "Proc. 29th Int. Tech. Meeting Sat. Div. Inst. Navig." doi: 10.33012/2016.14576 location: name: "Portland, OR." month: 9 pages: 18 start: 44 end: 61 scope: "Analysis of software strategies for accelerating signal processing." title: "Accelerating GNSS Software Receivers" type: conference-paper year: 2016 - authors: - family-names: "Fernández-Prades" given-names: Carles - family-names: Arribas given-names: Javier - family-names: Closas given-names: Pau - family-names: Avilés given-names: Carlos - family-names: Esteve given-names: Luis conference: name: "Proc. 24th Int. Tech. Meeting Sat. Div. Inst. Navig." location: name: "Portland, OR." month: 9 pages: 15 start: 780 end: 794 scope: "General description of the software architecture." title: "GNSS-SDR: An Open Source Tool For Researchers and Developers" type: conference-paper year: 2011 - authors: - family-names: "Fernández-Prades" given-names: Carles - family-names: Avilés given-names: Carlos - family-names: Esteve given-names: Luis - family-names: Arribas given-names: Javier - family-names: Closas given-names: Pau conference: name: "Proc. 5th ESA Workshop on Satellite Navigation Technologies and European Workshop on GNSS Signals and Signal Processing (NAVITEC)." doi: 10.1109/NAVITEC.2010.5707981 location: name: "ESA/ESTEC, Noordwijk, Netherlands." month: 12 pages: 8 scope: "Seminal work on GNSS-SDR and its software design patterns." title: "Design patterns for GNSS software receivers" type: conference-paper year: 2010 repository-code: "https://github.com/gnss-sdr/gnss-sdr" title: GNSS-SDR type: software url: "https://gnss-sdr.org" version: "0.0.20" gnss-sdr-0.0.20/CMakeLists.txt000066400000000000000000005566311477325711200161220ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2010-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ################################################################################ # Project setup ################################################################################ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) message(FATAL_ERROR "Prevented in-tree build, it is bad practice.\nTry 'cd build && cmake ..' instead.") endif() # Select the release build type by default to get optimization flags. # This has to come before project() which otherwise initializes it. # Build type can still be overridden by setting -DCMAKE_BUILD_TYPE= set(CMAKE_BUILD_TYPE "Release" CACHE STRING "") cmake_minimum_required(VERSION 2.8.12...4.0) project(gnss-sdr CXX C) set(GNSSSDR_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # Allows to be a sub-project set(GNSSSDR_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) list(APPEND CMAKE_MODULE_PATH ${GNSSSDR_SOURCE_DIR}/cmake/Modules) ################################################################################ # Determine optional blocks/libraries to be built (default: not built) # Enable them at the command line by doing 'cmake -DENABLE_XXX=ON ..' ################################################################################ include(FeatureSummary) # Support of optional RF front-ends option(ENABLE_UHD "Enable the use of UHD (driver for all USRP devices)" ON) option(ENABLE_OSMOSDR "Enable the use of OsmoSDR and other front-ends (RTL-based dongles, HackRF, bladeRF, etc.) as signal source" OFF) option(ENABLE_LIMESDR "Enable the use of LimeSDR and Custom LimeSDR as signal source" OFF) option(ENABLE_FMCOMMS2 "Enable the use of FMCOMMS4-EBZ + ZedBoard hardware, requires gr-iio" OFF) option(ENABLE_PLUTOSDR "Enable the use of ADALM-PLUTO Evaluation Boards (Analog Devices Inc.), requires gr-iio" OFF) option(ENABLE_AD936X_SDR "Enable the use of AD936X front-ends using libiio, requires libiio" OFF) option(ENABLE_AD9361 "Enable the use of AD9361 direct to FPGA hardware, requires libiio" OFF) option(ENABLE_MAX2771 "Enable the use of MAX2771 direct to FPGA hardware, requires the spidev driver" OFF) option(ENABLE_DMA_PROXY "Enable the use of the DMA direct to FPGA hardware, requires the DMA Proxy driver" OFF) option(ENABLE_RAW_UDP "Enable the use of high-optimized custom UDP packet sample source, requires libpcap" OFF) option(ENABLE_FLEXIBAND "Enable the use of the signal source adater for the Teleorbit Flexiband GNU Radio driver" OFF) option(ENABLE_ARRAY "Enable the use of CTTC's antenna array front-end as signal source (experimental)" OFF) option(ENABLE_ZMQ "Enable GNU Radio ZeroMQ Messaging, requires gr-zeromq" ON) option(ENABLE_ION "Enable ION GNSS-SDR Metadata Standard signal source" OFF) # Performance analysis tools option(ENABLE_GPERFTOOLS "Enable linking to Gperftools libraries (tcmalloc and profiler)" OFF) option(ENABLE_GPROF "Enable the use of the GNU profiler tool 'gprof'" OFF) # Code correctness option(ENABLE_CLANG_TIDY "Enable the use of clang-tidy when compiling" OFF) # Acceleration option(ENABLE_PROFILING "Enable execution of volk_gnsssdr_profile at the end of the building" OFF) option(ENABLE_OPENCL "Enable building of processing blocks implemented with OpenCL (experimental)" OFF) option(ENABLE_CUDA "Enable building of processing blocks implemented with CUDA (experimental, requires CUDA SDK)" OFF) option(ENABLE_FPGA "Enable building of processing blocks implementing FPGA offloading" OFF) # Building and packaging options option(ENABLE_PACKAGING "Enable software packaging" OFF) option(ENABLE_OWN_GLOG "Download glog and link it to gflags" OFF) option(ENABLE_GLOG_AND_GFLAGS "Force using Google glog and Gflags instead of Abseil" OFF) option(ENABLE_OWN_ABSEIL "Forces downloading and building of Abseil" OFF) if(CMAKE_VERSION VERSION_LESS 3.24) set(ENABLE_OWN_ABSEIL OFF) endif() if(ENABLE_OWN_ABSEIL) set(ENABLE_OWN_GLOG OFF) set(ENABLE_GLOG_AND_GFLAGS OFF) endif() option(ENABLE_OWN_ARMADILLO "Download and build Armadillo locally" OFF) option(ENABLE_LOG "Enable internal logging" ON) option(ENABLE_ARMA_NO_DEBUG OFF) option(ENABLE_STRIP "Create stripped binaries without debugging symbols (in Release build mode only)" OFF) option(Boost_USE_STATIC_LIBS "Use Boost static libs" OFF) option(ENABLE_GNUTLS "Forces linking against GnuTLS" OFF) if(ENABLE_PACKAGING) set(ENABLE_ARMA_NO_DEBUG ON) set(CMAKE_VERBOSE_MAKEFILE ON) set(ENABLE_STRIP OFF) endif() # Testing option(ENABLE_UNIT_TESTING "Build unit tests" ON) option(ENABLE_UNIT_TESTING_MINIMAL "Build a minimal set of unit tests" OFF) option(ENABLE_UNIT_TESTING_EXTRA "Download external files and build extra unit tests" OFF) option(ENABLE_SYSTEM_TESTING "Build system tests" OFF) option(ENABLE_SYSTEM_TESTING_EXTRA "Download external tools and build extra system tests" OFF) option(ENABLE_GNSS_SIM_INSTALL "Enable the installation of gnss_sim on the fly" ON) option(ENABLE_CPUFEATURES "Make use of the cpu_features library" ON) if(NOT (ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA)) set(ENABLE_GNSS_SIM_INSTALL OFF) endif() if(ENABLE_SYSTEM_TESTING_EXTRA) set(ENABLE_SYSTEM_TESTING ON) endif() option(ENABLE_OWN_GNSSTK "Force to download, build and link gnsstk for system tests, even if it is already installed" OFF) if(NOT ENABLE_OWN_GNSSTK) option(ENABLE_OWN_GPSTK "Force to download, build and link gnsstk for system tests, even if it is already installed" OFF) if(ENABLE_OWN_GPSTK) unset(Gnsstk:gnsstk CACHE) unset(GNSSTK_FOUND CACHE) message(STATUS "WARNING: Option ENABLE_OWN_GPSTK is deprecated, please use ENABLE_OWN_GNSSTK") set(ENABLE_OWN_GNSSTK ON) endif() endif() option(ENABLE_INSTALL_TESTS "Install QA code system-wide" OFF) if(ENABLE_FPGA) set(ENABLE_INSTALL_TESTS ON) endif() option(ENABLE_BENCHMARKS "Build code snippets benchmarks" OFF) if(CMAKE_VERSION VERSION_LESS 3.16.3) set(ENABLE_BENCHMARKS OFF) endif() option(ENABLE_EXTERNAL_MATHJAX "Use MathJax from an external CDN in HTML docs" ON) option(ENABLE_ORC "Use (if available) the Optimized Inner Loop Runtime Compiler (ORC)" OFF) ################################################################################ # GNSS-SDR version information ################################################################################ set(THIS_IS_A_RELEASE ON) # only related to version name, no further implications. if(NOT ${THIS_IS_A_RELEASE}) find_package(Git) set_package_properties(Git PROPERTIES URL "https://git-scm.com" DESCRIPTION "A free and open source distributed version control system (found: v${GIT_VERSION_STRING})" PURPOSE "Manage version control, get MINOR_VERSION name for version number." TYPE REQUIRED ) if(GIT_FOUND) # was this info set in the CMake commandline? if(NOT GIT_BRANCH) # no: try to find it execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD WORKING_DIRECTORY ${GNSSSDR_SOURCE_DIR} OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE ) endif() # was this info set in the CMake commandline? if(NOT GIT_COMMIT_HASH) # Get the latest abbreviated commit hash of the working branch execute_process( COMMAND ${GIT_EXECUTABLE} log -1 --format=%h WORKING_DIRECTORY ${GNSSSDR_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) endif() endif() endif() set(VERSION_INFO_MAJOR_VERSION 0) set(VERSION_INFO_API_COMPAT 0) if(${THIS_IS_A_RELEASE}) set(VERSION_INFO_MINOR_VERSION 20) else() set(VERSION_INFO_MINOR_VERSION 20.git-${GIT_BRANCH}-${GIT_COMMIT_HASH}) endif() set(VERSION ${VERSION_INFO_MAJOR_VERSION}.${VERSION_INFO_API_COMPAT}.${VERSION_INFO_MINOR_VERSION}) ################################################################################ # Environment setup ################################################################################ include(ExternalProject) # Detect 64-bits machine if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(ARCH_64BITS TRUE) endif() # Set prefix path for PyBOMBS and Snaps, if defined in environment variables if(NOT CMAKE_PREFIX_PATH) if(DEFINED ENV{PYBOMBS_PREFIX}) set(CMAKE_PREFIX_PATH $ENV{PYBOMBS_PREFIX}) endif() if(DEFINED ENV{SNAP}) set(CMAKE_PREFIX_PATH $ENV{SNAP}) endif() endif() # Detect Linux Distribution if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") include(DetectLinuxDistro) if(CMAKE_CROSSCOMPILING) message(STATUS "Configuring GNSS-SDR v${VERSION} to be cross-compiled on ${LINUX_DISTRIBUTION} ${LINUX_VER} (${CMAKE_HOST_SYSTEM_PROCESSOR}) for ${CMAKE_SYSTEM_PROCESSOR}") else() message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on GNU/Linux ${LINUX_DISTRIBUTION} ${LINUX_VER} ${ARCHITECTURE_STRING}") endif() endif() # Detect macOS / Mac OS X Version if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") include(DetectMacOSVersion) message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on ${MACOS_DISTRIBUTION}") endif() # Define extra build types and select Release by default to get optimization flags include(GnsssdrBuildTypes) # Available options: # - None: nothing set # - Debug: -O2 -g # - Release: -O3 # - RelWithDebInfo: -O3 -g # - MinSizeRel: -Os # - Coverage: -Wall -pedantic -pthread -g -O0 -fprofile-arcs -ftest-coverage # - NoOptWithASM: -O0 -g -save-temps # - O2WithASM: -O2 -g -save-temps # - O3WithASM: -O3 -g -save-temps # - ASAN: -Wall -Wextra -g -O2 -fsanitize=address -fno-omit-frame-pointer gnsssdr_check_build_type(${CMAKE_BUILD_TYPE}) message(STATUS "Build type set to ${CMAKE_BUILD_TYPE}.") if(NOT (${CMAKE_BUILD_TYPE} STREQUAL "Release")) set(ENABLE_STRIP OFF) endif() # Enable optimization options in GCC for Release and RelWithDebInfo build types if((${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") AND (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")) if(NOT (${LINUX_DISTRIBUTION} MATCHES "Fedora") AND NOT (${LINUX_DISTRIBUTION} MATCHES "Gentoo")) # flag -O3 enables tree vectorization # See https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG") set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG") set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG") endif() endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") # Fix for Debug and None modes in macOS # without this, get get a runtime error include(CheckCXXCompilerFlag) check_cxx_compiler_flag(-fstandalone-debug HAVE_STANDALONE_DEBUG) check_cxx_compiler_flag(-Og HAVE_OG_FLAG) if(HAVE_STANDALONE_DEBUG AND HAVE_OG_FLAG) set(CMAKE_CXX_FLAGS_DEBUG "-Og -g -fstandalone-debug") set(CMAKE_C_FLAGS_DEBUG "-Og -g -fstandalone-debug") if(CMAKE_BUILD_TYPE STREQUAL "None") add_compile_options(-Og -fstandalone-debug) endif() endif() endif() endif() # allow 'large' files in 32 bit builds if(UNIX) if(CMAKE_VERSION VERSION_GREATER 3.12.0) add_compile_definitions(_LARGEFILE_SOURCE _FILE_OFFSET_BITS=64 _LARGE_FILES) else() add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES) endif() endif() # If this is an out-of-tree build, do not pollute the original source directory if(${GNSSSDR_BINARY_DIR} MATCHES ${GNSSSDR_SOURCE_DIR}) set(LOCAL_INSTALL_BASE_DIR ${GNSSSDR_SOURCE_DIR}) else() set(LOCAL_INSTALL_BASE_DIR ${GNSSSDR_BINARY_DIR}) endif() # Determine if CMake scripts make use of target_sources() if(CMAKE_VERSION VERSION_GREATER 3.13) set(USE_CMAKE_TARGET_SOURCES ON) endif() # Determine if we are using make or ninja if(CMAKE_MAKE_PROGRAM MATCHES "make") set(CMAKE_MAKE_PROGRAM_PRETTY_NAME "make") endif() if(CMAKE_MAKE_PROGRAM MATCHES "ninja") set(CMAKE_MAKE_PROGRAM_PRETTY_NAME "ninja") endif() if(CMAKE_MAKE_PROGRAM MATCHES "xcodebuild") set(CMAKE_MAKE_PROGRAM_PRETTY_NAME "xcodebuild") endif() if(NOT CMAKE_MAKE_PROGRAM_PRETTY_NAME) set(CMAKE_MAKE_PROGRAM_PRETTY_NAME "${CMAKE_MAKE_PROGRAM}") endif() if(CMAKE_VERSION VERSION_LESS 3.12) if(POLICY CMP0057) # required by FindDoxygen.cmake module cmake_policy(SET CMP0057 NEW) # Support if() IN_LIST operator, added in CMake 3.3 endif() endif() ################################################################################ # Minimum required versions ################################################################################ set(GNSSSDR_APPLECLANG_MIN_VERSION "500") set(GNSSSDR_ARMADILLO_MIN_VERSION "5.300.0") set(GNSSSDR_BOOST_MIN_VERSION "1.53") set(GNSSSDR_CLANG_MIN_VERSION "3.4.0") set(GNSSSDR_GCC_MIN_VERSION "4.7.2") set(GNSSSDR_GFLAGS_MIN_VERSION "2.1.2") set(GNSSSDR_GNURADIO_MIN_VERSION "3.7.3") set(GNSSSDR_MAKO_MIN_VERSION "0.4.2") set(GNSSSDR_MATIO_MIN_VERSION "1.5.3") set(GNSSSDR_PROTOBUF_MIN_VERSION "3.0.0") set(GNSSSDR_PYTHON_MIN_VERSION "2.7") set(GNSSSDR_PYTHON3_MIN_VERSION "3.4") set(GNSSSDR_ABSEIL_MIN_VERSION "20240116") ################################################################################ # Versions to download and build (but not to install system-wide) if not found ################################################################################ set(GNSSSDR_ARMADILLO_LOCAL_VERSION "14.4.x") set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.2") set(GNSSSDR_GLOG_LOCAL_VERSION "0.7.1") set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.28") set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "30.2") set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.15") set(GNSSSDR_GTEST_LOCAL_VERSION "1.16.0") set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "origin/master") set(GNSSSDR_GNSSTK_LOCAL_VERSION "14.3.0") set(GNSSSDR_BENCHMARK_LOCAL_VERSION "1.9.2") set(GNSSSDR_MATHJAX_EXTERNAL_VERSION "2.7.7") set(GNSSSDR_ABSL_LOCAL_VERSION "origin/master") # live at head (see https://abseil.io/about/releases) # Downgrade versions if requirements are not met if(CMAKE_VERSION VERSION_LESS "3.5") set(GNSSSDR_ARMADILLO_LOCAL_VERSION "12.8.x") endif() if(CMAKE_VERSION VERSION_LESS "3.22") set(GNSSSDR_GLOG_LOCAL_VERSION "0.6.0") endif() if(CMAKE_VERSION VERSION_LESS "3.16") set(GNSSSDR_GLOG_LOCAL_VERSION "0.5.0") endif() if(CMAKE_VERSION VERSION_LESS "3.3") set(GNSSSDR_GLOG_LOCAL_VERSION "0.4.0") endif() if(CMAKE_VERSION VERSION_LESS "3.0.2") set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.1") # Fix for CentOS 7 set(GNSSSDR_GLOG_LOCAL_VERSION "0.3.4") # Fix for Ubuntu 14.04 endif() if(CMAKE_VERSION VERSION_LESS "3.5") set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.13") endif() if(CMAKE_VERSION VERSION_LESS "3.4") set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.10") endif() if(CMAKE_VERSION VERSION_LESS "3.16") set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "29.3") endif() if(CMAKE_CROSSCOMPILING OR CMAKE_VERSION VERSION_LESS "3.13" OR ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0.0)) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0")) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11"))) set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "21.12") endif() if(CMAKE_VERSION VERSION_LESS "3.16") set(GNSSSDR_GTEST_LOCAL_VERSION "1.15.2") endif() if(CMAKE_VERSION VERSION_LESS "3.13" OR (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3.1) OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0.0)) set(GNSSSDR_GTEST_LOCAL_VERSION "1.13.0") endif() if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) OR CMAKE_VERSION VERSION_LESS 3.5) set(GNSSSDR_GTEST_LOCAL_VERSION "1.10.x") endif() if(CMAKE_VERSION VERSION_LESS "3.17") set(GNSSSDR_GNSSTK_LOCAL_VERSION "13.7.0") endif() ################################################################################ # Check compiler version ################################################################################ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${GNSSSDR_GCC_MIN_VERSION}) message(STATUS "Your GCC version is too old and does not support some C++ features required by GNSS-SDR. GCC version must be at least ${GNSSSDR_GCC_MIN_VERSION}") message(FATAL_ERROR "Fatal error: GCC >= ${GNSSSDR_GCC_MIN_VERSION} required.") endif() endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") execute_process(COMMAND ${CMAKE_CXX_COMPILER} -v RESULT_VARIABLE _res ERROR_VARIABLE _err ERROR_STRIP_TRAILING_WHITESPACE ) if(${_res} STREQUAL "0") # output is in error stream string(REGEX MATCH "^Apple.*" IS_APPLE ${_err}) if("${IS_APPLE}" STREQUAL "") set(MIN_VERSION ${GNSSSDR_CLANG_MIN_VERSION}) set(APPLE_STR "") # retrieve the compiler's version from it string(REGEX MATCH "clang version [0-9.]+" CLANG_OTHER_VERSION ${_err}) string(REGEX MATCH "[0-9.]+" CLANG_VERSION ${CLANG_OTHER_VERSION}) else() set(MIN_VERSION ${GNSSSDR_APPLECLANG_MIN_VERSION}) set(APPLE_STR "Apple ") # retrieve the compiler's version from it string(REGEX MATCH "(clang-[0-9.]+)" CLANG_APPLE_VERSION ${_err}) string(REGEX MATCH "[0-9.]+" CLANG_VERSION ${CLANG_APPLE_VERSION}) endif() if(${CLANG_VERSION} VERSION_LESS "${MIN_VERSION}") message(WARNING "\nThe compiler selected to build GNSS-SDR (${APPLE_STR}Clang version ${CLANG_VERSION} : ${CMAKE_CXX_COMPILER}) is older than that officially supported (${MIN_VERSION} minimum). This build may or not work. We highly recommend using Apple Clang version ${APPLECLANG_MIN_VERSION} or more recent, or Clang version ${CLANG_MIN_VERSION} or more recent.") endif() else() message(WARNING "\nCannot determine the version of the compiler selected to build GNSS-SDR (${APPLE_STR}Clang : ${CMAKE_CXX_COMPILER}). This build may or not work. We highly recommend using Apple Clang version ${APPLECLANG_MIN_VERSION} or more recent, or Clang version ${CLANG_MIN_VERSION} or more recent.") endif() endif() # Determine if we use lambdas if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.1.1") set(DO_NOT_USE_LAMBDAS ON) endif() endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") if(CLANG_VERSION VERSION_LESS "600") set(DO_NOT_USE_LAMBDAS ON) endif() else() if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5.0") set(DO_NOT_USE_LAMBDAS ON) endif() endif() endif() # Determine if we try to use generic lambdas if(NOT DO_NOT_USE_LAMBDAS) if(CMAKE_VERSION VERSION_GREATER 3.1 AND NOT ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0))) set(USE_GENERIC_LAMBDAS ON) endif() endif() ################################################################################ # Set minimal C and C++ standards ################################################################################ if(NOT (CMAKE_VERSION VERSION_LESS "3.1")) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_EXTENSIONS OFF) else() add_compile_options("$<$,C>:-std=gnu11>") set(CMAKE_C_STANDARD 11) # set variable just for reporting if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.1.1") add_compile_options("$<$,CXX>:-std=c++11>") set(CMAKE_CXX_STANDARD 11) # set variable just for reporting else() add_compile_options("$<$,CXX>:-std=c++14>") set(CMAKE_CXX_STANDARD 14) # set variable just for reporting endif() endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") if(CLANG_VERSION VERSION_LESS "600") add_compile_options("$<$,CXX>:-std=c++11>") set(CMAKE_CXX_STANDARD 11) else() add_compile_options("$<$,CXX>:-std=c++14>") set(CMAKE_CXX_STANDARD 14) endif() else() if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5.0") add_compile_options("$<$,CXX>:-std=c++11>") set(CMAKE_CXX_STANDARD 11) else() add_compile_options("$<$,CXX>:-std=c++14>") set(CMAKE_CXX_STANDARD 14) endif() endif() endif() endif() # Visibility # See https://gcc.gnu.org/wiki/Visibility if(POLICY CMP0063) cmake_policy(SET CMP0063 NEW) set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) else() if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) add_definitions(-fvisibility=hidden) endif() endif() ################################################################################ # Check if the compiler defines the architecture as ARM ################################################################################ if(CMAKE_SYSTEM_PROCESSOR MATCHES "(^arm)|(^aarch64)") set(IS_ARM TRUE) endif() if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")) if(CMAKE_CROSSCOMPILING) if(NOT CMAKE_NO_SYSTEM_FROM_IMPORTED) set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE) endif() endif() endif() ################################################################################ # pkg-config - Helper tool used when compiling applications and libraries. ################################################################################ set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH TRUE) set(FPHSA_NAME_MISMATCHED ON) find_package(PkgConfig) ################################################################################ # Find the POSIX thread (pthread) libraries ################################################################################ if(CMAKE_VERSION VERSION_LESS 3.1) # Workaround for CMake < 3.1 find_package(Threads REQUIRED) add_library(Threads::Threads SHARED IMPORTED) set_property(TARGET Threads::Threads PROPERTY INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}") set_property(TARGET Threads::Threads PROPERTY IMPORTED_LINK_INTERFACE_LANGUAGES "CXX") include(GNUInstallDirs) # Fix bug in Debian 8.11 if(${LINUX_DISTRIBUTION} MATCHES "Debian") if(${LINUX_VER} VERSION_LESS 8.12) if(ARCH_64BITS) set(FIX_PTHREADS_LOCATION "x86_64-linux-gnu/") endif() endif() endif() set_property(TARGET Threads::Threads PROPERTY IMPORTED_LOCATION /usr/${CMAKE_INSTALL_LIBDIR}/${FIX_PTHREADS_LOCATION}${CMAKE_FIND_LIBRARY_PREFIXES}pthread${CMAKE_SHARED_LIBRARY_SUFFIX}) else() set(CMAKE_THREAD_PREFER_PTHREAD TRUE) if(CMAKE_CROSSCOMPILING) set(THREADS_PREFER_PTHREAD_FLAG FALSE) else() set(THREADS_PREFER_PTHREAD_FLAG TRUE) endif() find_package(Threads REQUIRED) endif() set_package_properties(Threads PROPERTIES URL "https://computing.llnl.gov/tutorials/pthreads/" DESCRIPTION "Implements the POSIX Threads execution model" PURPOSE "Used to implement parallelism." TYPE REQUIRED ) ################################################################################ # Set GNSSSDR_LIB_PATHS and GNSSSDR_INCLUDE_PATHS ################################################################################ include(GnsssdrFindPaths) ################################################################################ # Googletest - https://github.com/google/googletest ################################################################################ enable_testing() if(ENABLE_UNIT_TESTING OR ENABLE_SYSTEM_TESTING) if(NOT GTEST_DIR) if(DEFINED ENV{GTEST_DIR}) set(GTEST_DIR $ENV{GTEST_DIR}) message(STATUS "Googletest root folder set at ${GTEST_DIR}") endif() endif() endif() find_package(GOOGLETEST) set_package_properties(GOOGLETEST PROPERTIES PURPOSE "Used for Unit and System Tests." TYPE REQUIRED ) if(NOT GOOGLETEST_FOUND) set_package_properties(GOOGLETEST PROPERTIES PURPOSE "Googletest v${GNSSSDR_GTEST_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." ) endif() ################################################################################ # VOLK - Vector-Optimized Library of Kernels ################################################################################ find_package(VOLK) if(NOT VOLK_FOUND) message(FATAL_ERROR "*** VOLK is required to build gnss-sdr") endif() set_package_properties(VOLK PROPERTIES PURPOSE "Provides an abstraction of optimized math routines targeting several SIMD processors." TYPE REQUIRED ) ################################################################################ # GNU Radio - https://www.gnuradio.org ################################################################################ list(APPEND GR_REQUIRED_COMPONENTS RUNTIME PMT BLOCKS FFT FILTER ANALOG) find_package(UHD) set_package_properties(UHD PROPERTIES PURPOSE "Used for communication with front-ends of the USRP family." TYPE OPTIONAL ) if(ENABLE_UHD) if(NOT UHD_FOUND) set(ENABLE_UHD OFF) else() list(APPEND GR_REQUIRED_COMPONENTS UHD) endif() endif() find_package(ZEROMQ) set_package_properties(ZEROMQ PROPERTIES PURPOSE "Used by the ZMQ_Signal_Source." TYPE OPTIONAL ) if(ENABLE_ZMQ) if(NOT ZEROMQ_FOUND) set(ENABLE_ZMQ OFF) else() list(APPEND GR_REQUIRED_COMPONENTS ZEROMQ) endif() endif() find_package(GNURADIO) set_package_properties(GNURADIO PROPERTIES PURPOSE "Implements flowgraph scheduler, provides some processing blocks and classes to create new ones." TYPE REQUIRED ) if(NOT (GNURADIO_VERSION VERSION_LESS "3.8")) set(GNURADIO_IS_38_OR_GREATER ON) endif() ################################################################################ # Detect availability of std::filesystem and set C++ standard accordingly ################################################################################ set(FILESYSTEM_FOUND FALSE) if(NOT ENABLE_OWN_GNSSTK) unset(Gnsstk::gnsstk CACHE) unset(GNSSTK_FOUND CACHE) unset(GNSSTK_OLDER_THAN_8 CACHE) unset(GNSSTK_OLDER_THAN_9 CACHE) unset(GNSSTK_OLDER_THAN_13 CACHE) find_package(GNSSTK) set_package_properties(GNSSTK PROPERTIES PURPOSE "Used in some Extra Tests." ) else() unset(Gnsstk::gnsstk CACHE) unset(GNSSTK_FOUND CACHE) unset(GNSSTK_OLDER_THAN_8 CACHE) unset(GNSSTK_OLDER_THAN_9 CACHE) unset(GNSSTK_OLDER_THAN_13 CACHE) endif() if(NOT (GNURADIO_VERSION VERSION_LESS 3.8) AND (LOG4CPP_READY_FOR_CXX17 OR GNURADIO_USES_SPDLOG)) # Check if we have std::filesystem if(NOT (CMAKE_VERSION VERSION_LESS 3.8)) if(NOT GNSSTK_FOUND OR NOT (GNSSTK_FOUND AND GNSSTK_OLDER_THAN_8)) # Fix for GNSSTk < 8.0.0 find_package(FILESYSTEM COMPONENTS Final Experimental) set_package_properties(FILESYSTEM PROPERTIES URL "https://en.cppreference.com/w/cpp/filesystem" DESCRIPTION "Provides facilities for performing operations on file systems and their components" PURPOSE "Work with paths, regular files, and directories." TYPE OPTIONAL ) endif() if(FILESYSTEM_FOUND) set(CMAKE_CXX_STANDARD 17) if(CMAKE_VERSION VERSION_GREATER 3.13) if(((NOT UHD_FOUND) OR (UHD_FOUND AND ("${UHD_VERSION}" VERSION_GREATER 4.2.99))) AND (GNURADIO_VERSION VERSION_GREATER 3.10.3.99)) set(CMAKE_CXX_STANDARD 20) # if(CMAKE_VERSION VERSION_GREATER 3.20.99) # if(((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11.0.0")) OR # ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "12.0"))) # set(CMAKE_CXX_STANDARD 23) # endif() # endif() endif() endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) endif() endif() endif() if((NOT PMT_USES_BOOST_ANY) AND (CMAKE_CXX_STANDARD VERSION_LESS 17)) message(FATAL_ERROR "GNU Radio v${GNURADIO_VERSION} requires C++17. Please update your environment.") endif() ################################################################################ # Boost - https://www.boost.org ################################################################################ if(UNIX AND EXISTS "/usr/lib64") list(APPEND BOOST_LIBRARYDIR "/usr/lib64") # Fedora 64-bit fix endif() if(NOT BOOST_ROOT) # Workaround for Macports if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") if(${DETECT_MACPORTS} EQUAL 0) if(EXISTS "${MACPORTS_PREFIX}/libexec/boost/1.76") set(BOOST_ROOT "${MACPORTS_PREFIX}/libexec/boost/1.76") elseif(EXISTS "${MACPORTS_PREFIX}/libexec/boost/1.71") set(BOOST_ROOT "${MACPORTS_PREFIX}/libexec/boost/1.71") endif() endif() endif() endif() # Boost_ADDITIONAL_VERSIONS is only used internally by cmake to know the # formation of newer versions. No need to increase, not used anymore since newer # Boost provides its own CMake configuration files. set(Boost_ADDITIONAL_VERSIONS "1.53.0" "1.53" "1.54.0" "1.54" "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59" "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64" "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69" "1.70.0" "1.70" "1.71.0" "1.71" ) set(Boost_USE_MULTITHREAD ON) set(BOOST_COMPONENTS atomic chrono date_time serialization system thread) if(NOT ${FILESYSTEM_FOUND}) set(BOOST_COMPONENTS ${BOOST_COMPONENTS} filesystem) endif() if(CMAKE_VERSION VERSION_LESS 3.30) find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} COMPONENTS ${BOOST_COMPONENTS} REQUIRED) else() find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} COMPONENTS ${BOOST_COMPONENTS}) if(Boost_FOUND) get_filename_component(BOOST_PREFIX ${Boost_INCLUDE_DIRS} DIRECTORY) message(STATUS "Found Boost v${Boost_VERSION_STRING} at ${BOOST_PREFIX}") else() message(STATUS "Trying deprecated FindBoost Module ...") if(POLICY CMP0167) cmake_policy(SET CMP0167 OLD) find_package(Boost ${GNSSSDR_BOOST_MIN_VERSION} REQUIRED COMPONENTS ${BOOST_COMPONENTS}) endif() endif() endif() if(NOT Boost_FOUND) message(FATAL_ERROR "Fatal error: Boost (version >=${GNSSSDR_BOOST_MIN_VERSION}) required.") endif() set_package_properties(Boost PROPERTIES URL "https://www.boost.org" PURPOSE "Used widely across the source code." TYPE REQUIRED ) if(CMAKE_VERSION VERSION_LESS 3.14) set(Boost_VERSION_STRING "${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}") endif() if(POLICY CMP0093) cmake_policy(SET CMP0093 NEW) # FindBoost reports Boost_VERSION in x.y.z format. endif() set_package_properties(Boost PROPERTIES DESCRIPTION "Portable C++ source libraries (found: v${Boost_VERSION_STRING})" ) # Define targets if CMake < 3.5 if(CMAKE_VERSION VERSION_LESS 3.5) if(NOT TARGET Boost::date_time) add_library(Boost::date_time SHARED IMPORTED) set_target_properties(Boost::date_time PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIR} INTERFACE_LINK_LIBRARIES ${Boost_DATE_TIME_LIBRARIES} IMPORTED_LOCATION ${Boost_DATE_TIME_LIBRARIES} ) endif() if(NOT TARGET Boost::system) add_library(Boost::system SHARED IMPORTED) set_target_properties(Boost::system PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIR} INTERFACE_LINK_LIBRARIES ${Boost_SYSTEM_LIBRARIES} IMPORTED_LOCATION ${Boost_SYSTEM_LIBRARIES} ) endif() if(NOT TARGET Boost::thread) add_library(Boost::thread SHARED IMPORTED) set_target_properties(Boost::thread PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIR} INTERFACE_LINK_LIBRARIES ${Boost_THREAD_LIBRARIES} IMPORTED_LOCATION ${Boost_THREAD_LIBRARIES} ) endif() if(NOT TARGET Boost::serialization) add_library(Boost::serialization SHARED IMPORTED) set_target_properties(Boost::serialization PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIR} INTERFACE_LINK_LIBRARIES ${Boost_SERIALIZATION_LIBRARIES} IMPORTED_LOCATION ${Boost_SERIALIZATION_LIBRARIES} ) endif() if(NOT TARGET Boost::chrono) add_library(Boost::chrono SHARED IMPORTED) set_target_properties(Boost::chrono PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIR} INTERFACE_LINK_LIBRARIES ${Boost_CHRONO_LIBRARIES} IMPORTED_LOCATION ${Boost_CHRONO_LIBRARIES} ) endif() if(NOT TARGET Boost::atomic) add_library(Boost::atomic SHARED IMPORTED) set_target_properties(Boost::atomic PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIR} INTERFACE_LINK_LIBRARIES ${Boost_ATOMIC_LIBRARIES} IMPORTED_LOCATION ${Boost_ATOMIC_LIBRARIES} ) endif() if(NOT ${FILESYSTEM_FOUND}) if(NOT TARGET Boost::filesystem) add_library(Boost::filesystem SHARED IMPORTED) set_target_properties(Boost::filesystem PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIR} INTERFACE_LINK_LIBRARIES ${Boost_FILESYSTEM_LIBRARIES} IMPORTED_LOCATION ${Boost_FILESYSTEM_LIBRARIES} ) endif() endif() endif() # Define Boost::headers target if CMake < 3.15 if(CMAKE_VERSION VERSION_LESS 3.15) if(NOT TARGET Boost::headers) if(CMAKE_VERSION VERSION_LESS 3.0) add_library(Boost::headers SHARED IMPORTED) # Trick for CMake 2.8.12 set_target_properties(Boost::headers PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIR} IMPORTED_LOCATION ${Boost_DATE_TIME_LIBRARIES} ) else() add_library(Boost::headers INTERFACE IMPORTED) set_target_properties(Boost::headers PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIR} ) endif() endif() endif() # Provide package descriptions if Boost >= 1.71.00 if(Boost_VERSION_STRING VERSION_GREATER 1.70.99) set_package_properties(boost_headers PROPERTIES URL "https://www.boost.org/" DESCRIPTION "Header files of Boost libraries" PURPOSE "Used widely across the source code." TYPE REQUIRED ) set_package_properties(boost_atomic PROPERTIES URL "https://www.boost.org/doc/libs/release/doc/html/atomic.html" DESCRIPTION "Provides atomic data types and operations on those types" PURPOSE "Required by Boost Thread." TYPE REQUIRED ) set_package_properties(boost_chrono PROPERTIES URL "https://www.boost.org/doc/libs/release/doc/html/chrono.html" DESCRIPTION "Useful time utilities" PURPOSE "Required by Boost Thread." TYPE REQUIRED ) set_package_properties(boost_date_time PROPERTIES URL "https://www.boost.org/doc/libs/release/doc/html/date_time.html" DESCRIPTION "A set of date-time libraries" PURPOSE "Required by Boost Thread." TYPE REQUIRED ) set_package_properties(boost_serialization PROPERTIES URL "https://www.boost.org/doc/libs/release/libs/serialization/doc/index.html" DESCRIPTION "Reversible deconstruction of C++ data structures to sequences of bytes" PURPOSE "Used for serializing data." TYPE REQUIRED ) set_package_properties(boost_system PROPERTIES URL "https://www.boost.org/doc/libs/release/libs/system/doc/html/system.html" DESCRIPTION "Extensible error reporting library" PURPOSE "Used for error reporting." TYPE REQUIRED ) set_package_properties(boost_thread PROPERTIES URL "https://www.boost.org/doc/libs/release/doc/html/thread.html" DESCRIPTION "Portable C++ multi-threading" PURPOSE "Used by GNU Radio multi-threading system." TYPE REQUIRED ) if(NOT ${FILESYSTEM_FOUND}) set_package_properties(boost_filesystem PROPERTIES URL "https://www.boost.org/doc/libs/release/libs/filesystem/doc/index.htm" DESCRIPTION "Portable facilities to manipulate paths and files" PURPOSE "Used for output file handling." TYPE REQUIRED ) endif() endif() if(Boost_VERSION_STRING VERSION_LESS 1.58.0) set(USE_OLD_BOOST_MATH_COMMON_FACTOR ON) endif() if(Boost_VERSION_STRING VERSION_GREATER 1.65.99) set(USE_BOOST_ASIO_IO_CONTEXT ON) endif() if(Boost_VERSION_STRING VERSION_LESS 1.73) # Disable concepts to address https://github.com/boostorg/asio/issues/312 if(((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.9) OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") AND (CMAKE_VERSION VERSION_GREATER 3.11)) target_compile_definitions(Boost::headers INTERFACE -DBOOST_ASIO_DISABLE_CONCEPTS ) endif() endif() # Workaround for https://github.com/boostorg/format/issues/67 if((Boost_VERSION_STRING VERSION_GREATER 1.71) AND (Boost_VERSION_STRING VERSION_LESS 1.73)) if(CMAKE_CXX_STANDARD VERSION_GREATER 17) set(CMAKE_CXX_STANDARD 17) endif() endif() # Workaround for macOS Sonoma if((CMAKE_CXX_STANDARD EQUAL 17) AND ((${CMAKE_SYSTEM_NAME} MATCHES "Darwin") AND ("${DARWIN_VERSION}" VERSION_GREATER "22.99"))) add_definitions(-D_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION=1) endif() # Fix for Boost Asio < 1.70 when using Clang in macOS if(Boost_VERSION_STRING VERSION_LESS 1.70.0) # Check if we have std::string_view unset(has_string_view CACHE) include(CheckCXXSourceCompiles) check_cxx_source_compiles(" #include  int main() { std::string_view sv; }" has_string_view ) endif() # Fox for CentOS 7 with cmake3 and gcc8 if(Boost_VERSION_STRING VERSION_LESS "1.60") set(USE_GENERIC_LAMBDAS OFF) endif() # Fix for Boost >= 1.73 if(Boost_VERSION_STRING VERSION_GREATER 1.72.99) set(USE_BOOST_BIND_PLACEHOLDERS ON) endif() ################################################################################ # Detect availability of std::span ################################################################################ unset(has_span CACHE) include(CheckCXXSourceCompiles) check_cxx_source_compiles(" #include int main() { std::span s; }" has_span ) ################################################################################ # Detect availability of std::rotl ################################################################################ unset(has_rotl CACHE) if(CMAKE_CXX_STANDARD VERSION_GREATER 17) check_cxx_source_compiles(" #include #include int main() { std::uint8_t i = 0b00011101; auto k = std::rotl(i,0); }" has_rotl ) endif() ################################################################################ # Detect availability of std::put_time (Workaround for gcc < 5.0) ################################################################################ check_cxx_source_compiles(" #include int main() { std::put_time(nullptr, \"\"); }" has_put_time ) ################################################################################ # Detect availability of std::plus without class specifier ################################################################################ unset(has_std_plus_void CACHE) if(CMAKE_CXX_STANDARD VERSION_GREATER 11) include(CheckCXXSourceCompiles) check_cxx_source_compiles(" #include int main() { [](float a=1, float b=0){return std::plus<>();}; };" has_std_plus_void ) endif() ################################################################################ # Detect availability of std::transform_reduce ################################################################################ unset(has_transform_reduce CACHE) unset(has_transform_reduce_with_execution_policy CACHE) if(CMAKE_CXX_STANDARD VERSION_GREATER 14) include(CheckCXXSourceCompiles) check_cxx_source_compiles(" #include #include #include int main() { std::vector a(5); std::vector b(5); auto c = std::transform_reduce(cbegin(a), cend(a), cbegin(b), 0, std::plus<>{}, std::multiplies<>{}); };" has_transform_reduce ) check_cxx_source_compiles(" #include #include #include #include int main() { std::vector a(5); std::vector b(5); auto c = std::transform_reduce(std::execution::par, cbegin(a), cend(a), cbegin(b), 0, std::plus<>{}, std::multiplies<>{}); };" has_transform_reduce_with_execution_policy ) endif() ################################################################################ # Detect availability of shm_open ################################################################################ unset(HAVE_SHM_OPEN CACHE) include(CheckFunctionExists) check_function_exists(shm_open HAVE_SHM_OPEN) ################################################################################ # volk_gnsssdr module - GNSS-SDR's own VOLK library ################################################################################ find_package(VOLKGNSSSDR) set_package_properties(VOLKGNSSSDR PROPERTIES PURPOSE "Accelerates math routines targeting several SIMD processors." TYPE REQUIRED ) if(NOT VOLKGNSSSDR_FOUND) message(STATUS " volk_gnsssdr will be built along with gnss-sdr when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") ############################### # Find Python required modules ############################### include(SetupPython) # sets PYTHON_EXECUTABLE and search for required modules if(NOT PYTHON_MIN_VER_FOUND) message(FATAL_ERROR "Python ${GNSSSDR_PYTHON_MIN_VERSION} or greater required to build VOLK_GNSSSDR") endif() if(${PYTHON3}) set(PYTHON_NAME "python3") else() set(PYTHON_NAME "python") endif() # Mako if(NOT MAKO_FOUND) message(STATUS "Mako template library not found. See https://www.makotemplates.org/") message(STATUS " You can try to install it by typing:") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(STATUS " sudo yum install ${PYTHON_NAME}-mako") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(STATUS " sudo zypper install ${PYTHON_NAME}-Mako") else() message(STATUS " sudo apt install ${PYTHON_NAME}-mako") endif() endif() message(FATAL_ERROR "Mako templates required to build VOLK_GNSSSDR") endif() if(PYTHON_NAME STREQUAL "python") # Six if(NOT SIX_FOUND) message(STATUS "python-six not found. See https://pythonhosted.org/six/") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") message(STATUS " You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(STATUS " sudo yum install ${PYTHON_NAME}-six") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(STATUS " sudo zypper install ${PYTHON_NAME}-six") else() message(STATUS " sudo apt install ${PYTHON_NAME}-six") endif() endif() message(FATAL_ERROR "six - python 2 and 3 compatibility library required to build VOLK_GNSSSDR") endif() endif() if(CMAKE_VERSION VERSION_GREATER 3.12) set_package_properties(Python3 PROPERTIES URL "https://www.python.org/" PURPOSE "Required to build volk_gnsssdr." TYPE REQUIRED ) if(Python3_FOUND) set_package_properties(Python3 PROPERTIES DESCRIPTION "An interpreted, high-level, general-purpose programming language (found: v${Python3_VERSION})" ) else() set_package_properties(Python3 PROPERTIES DESCRIPTION "An interpreted, high-level, general-purpose programming language" PURPOSE "Another Python version will be used." ) endif() if(Python2_FOUND) set_package_properties(Python2 PROPERTIES URL "https://www.python.org/" DESCRIPTION "An interpreted, high-level, general-purpose programming language (found: v${Python2_VERSION})" PURPOSE "Required to build volk_gnsssdr." TYPE REQUIRED ) endif() endif() if(CMAKE_VERSION VERSION_LESS 3.27 AND PYTHONINTERP_FOUND) set_package_properties(PythonInterp PROPERTIES URL "https://www.python.org/" DESCRIPTION "An interpreted, high-level, general-purpose programming language (found: v${PYTHON_VERSION_STRING})" PURPOSE "Required to build volk_gnsssdr." TYPE REQUIRED ) endif() set(STRIP_VOLK_GNSSSDR_PROFILE "") if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) set(STRIP_VOLK_GNSSSDR_PROFILE -DENABLE_STRIP=${ENABLE_STRIP}) if(ENABLE_PACKAGING) set(STRIP_VOLK_GNSSSDR_PROFILE ${STRIP_VOLK_GNSSSDR_PROFILE} -DCMAKE_VERBOSE_MAKEFILE=ON) endif() endif() set(VOLK_GNSSSDR_BUILD_COMMAND "${CMAKE_MAKE_PROGRAM}") if(PYTHON_EXECUTABLE) set(USE_THIS_PYTHON "-DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}") endif() if(CMAKE_GENERATOR STREQUAL Xcode) set(VOLK_GNSSSDR_BUILD_COMMAND "xcodebuild" "-configuration" $<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:Debug>:RelWithDebInfo>$<$:Debug> ) endif() if(CMAKE_TOOLCHAIN_FILE) set(VOLK_GNSSSDR_COMPILER "") else() set(VOLK_GNSSSDR_COMPILER -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}) endif() if(ENABLE_ORC) find_package(ORC) set_package_properties(ORC PROPERTIES PURPOSE "Used by volk_gnsssdr." TYPE OPTIONAL ) if(ORC_FOUND) set(ORC_ENABLED ON) else() set(ORC_ENABLED OFF) set(ENABLE_ORC OFF) endif() else() set(ORC_ENABLED OFF) set(ENABLE_ORC OFF) endif() set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_COMPILER} -DCMAKE_INSTALL_PREFIX=${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install -DENABLE_STATIC_LIBS=ON -DENABLE_PROFILING=${ENABLE_PROFILING} -DENABLE_ORC=${ORC_ENABLED} ${STRIP_VOLK_GNSSSDR_PROFILE} ${USE_THIS_PYTHON} ) if(CMAKE_C_FLAGS) # Required by some packaging systems set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}) endif() if(CMAKE_CXX_FLAGS) # Required by some packaging systems set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}) endif() if(DEFINED ENV{OECORE_TARGET_SYSROOT}) set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} -DCROSSCOMPILE_MULTILIB=TRUE -DBOOST_ROOT=$ENV{OECORE_TARGET_SYSROOT}/usr ) if(NOT CMAKE_TOOLCHAIN_FILE) set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${GNSSSDR_SOURCE_DIR}/cmake/Toolchains/oe-sdk_cross.cmake ) else() set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} ) endif() else() if(CMAKE_TOOLCHAIN_FILE) set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} ) endif() endif() if(CMAKE_SYSTEM_PROCESSOR MATCHES "^cortex") set(CMAKE_SYSTEM_PROCESSOR arm-${CMAKE_SYSTEM_PROCESSOR}) endif() include(GNUInstallDirs) set(SUPPORTED_CPU_FEATURES_ARCH FALSE) if(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips" OR CMAKE_SYSTEM_PROCESSOR MATCHES "(^aarch64)|(^arm64)|(^ARM64)" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(x86_64)|(AMD64|amd64)|(^i.86$)" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^(s390x)" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^riscv" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^loongarch") set(SUPPORTED_CPU_FEATURES_ARCH TRUE) endif() if(CMAKE_VERSION VERSION_LESS 3.2) ExternalProject_Add(volk_gnsssdr_module PREFIX ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module SOURCE_DIR ${GNSSSDR_SOURCE_DIR}/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr BINARY_DIR ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/build CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=$<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:ASAN> -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR} DOWNLOAD_COMMAND "" UPDATE_COMMAND "" PATCH_COMMAND "" BUILD_COMMAND ${VOLK_GNSSSDR_BUILD_COMMAND} INSTALL_DIR ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install ) else() if(SUPPORTED_CPU_FEATURES_ARCH) set(VOLK_GNSSSDR_BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}volk_gnsssdr${CMAKE_STATIC_LIBRARY_SUFFIX} ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr_profile ) if(ENABLE_CPUFEATURES) find_package(CPUFEATURES) set_package_properties(CPUFEATURES PROPERTIES URL "https://github.com/google/cpu_features" PURPOSE "Used by the volk_gnsssdr library." TYPE REQUIRED ) endif() if(CPUFEATURES_FOUND) message(STATUS "Found CpuFeatures: (found version ${CPUFEATURES_VERSION})") set_package_properties(CPUFEATURES PROPERTIES DESCRIPTION "A cross platform C99 library to get CPU features at runtime (version: ${CPUFEATURES_VERSION})" ) if((CMAKE_SYSTEM_PROCESSOR MATCHES "(^s390x)|(^riscv)|(^loongarch)") AND (CPUFEATURES_VERSION VERSION_LESS "0.8.0")) # detect cpu_features without s390x / riscv support set(ENABLE_CPUFEATURES OFF) endif() else() set_package_properties(CPUFEATURES PROPERTIES DESCRIPTION "A cross platform C99 library to get CPU features at runtime" ) if((DEFINED VOLK_VERSION AND VOLK_VERSION VERSION_GREATER "2.3" AND VOLK_VERSION VERSION_LESS "3.1") OR (CMAKE_VERSION VERSION_LESS "3.13")) # avoid clash with volk's cpufeatures. set(ENABLE_CPUFEATURES OFF) else() set_package_properties(CPUFEATURES PROPERTIES PURPOSE "CpuFeatures will be built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." ) set(VOLK_GNSSSDR_BUILD_BYPRODUCTS ${VOLK_GNSSSDR_BUILD_BYPRODUCTS} ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}cpu_features${CMAKE_STATIC_LIBRARY_SUFFIX} ) endif() endif() set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} -DVOLK_CPU_FEATURES=${ENABLE_CPUFEATURES} ) ExternalProject_Add(volk_gnsssdr_module PREFIX ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module SOURCE_DIR ${GNSSSDR_SOURCE_DIR}/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr BINARY_DIR ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/build CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=$<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:ASAN> -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR} DOWNLOAD_COMMAND "" UPDATE_COMMAND "" PATCH_COMMAND "" BUILD_COMMAND ${VOLK_GNSSSDR_BUILD_COMMAND} BUILD_BYPRODUCTS ${VOLK_GNSSSDR_BUILD_BYPRODUCTS} INSTALL_DIR ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install ) else() set(ENABLE_CPUFEATURES OFF) set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} -DVOLK_CPU_FEATURES=${ENABLE_CPUFEATURES} ) ExternalProject_Add(volk_gnsssdr_module PREFIX ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module SOURCE_DIR ${GNSSSDR_SOURCE_DIR}/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr BINARY_DIR ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/build CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=$<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:ASAN> -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR} DOWNLOAD_COMMAND "" UPDATE_COMMAND "" PATCH_COMMAND "" BUILD_COMMAND ${VOLK_GNSSSDR_BUILD_COMMAND} BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}volk_gnsssdr${CMAKE_STATIC_LIBRARY_SUFFIX} ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr_profile ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr-config-info INSTALL_DIR ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install ) endif() endif() if(NOT ORC_LIBRARIES_STATIC) set(ORC_LIBRARIES_STATIC "") set(ORC_INCLUDE_DIRS "") endif() add_library(volk_gnsssdr UNKNOWN IMPORTED) set_property(TARGET volk_gnsssdr PROPERTY IMPORTED_LOCATION ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/${CMAKE_INSTALL_LIBDIR}/libvolk_gnsssdr${CMAKE_STATIC_LIBRARY_SUFFIX}) set(VOLK_GNSSSDR_INCLUDE_DIRS "${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/build/include/;${GNSSSDR_SOURCE_DIR}/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include;${ORC_INCLUDE_DIRS}") set(VOLK_GNSSSDR_LIBRARIES volk_gnsssdr ${ORC_LIBRARIES_STATIC}) if(CPUFEATURES_FOUND) set(VOLK_GNSSSDR_LIBRARIES ${VOLK_GNSSSDR_LIBRARIES} CpuFeature::cpu_features) endif() if(NOT TARGET Volkgnsssdr::volkgnsssdr) file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/build/include) add_library(Volkgnsssdr::volkgnsssdr STATIC IMPORTED) add_dependencies(Volkgnsssdr::volkgnsssdr volk_gnsssdr_module) set_target_properties(Volkgnsssdr::volkgnsssdr PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/${CMAKE_INSTALL_LIBDIR}/libvolk_gnsssdr${CMAKE_STATIC_LIBRARY_SUFFIX}" INCLUDE_DIRECTORIES "${VOLK_GNSSSDR_INCLUDE_DIRS}" INTERFACE_INCLUDE_DIRECTORIES "${VOLK_GNSSSDR_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${VOLK_GNSSSDR_LIBRARIES}" ) if(CMAKE_VERSION VERSION_GREATER 3.0 AND SUPPORTED_CPU_FEATURES_ARCH) if(NOT CPUFEATURES_FOUND AND ENABLE_CPUFEATURES) set_target_properties(Volkgnsssdr::volkgnsssdr PROPERTIES INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}cpu_features${CMAKE_STATIC_LIBRARY_SUFFIX} ) endif() endif() endif() if(CMAKE_VERSION VERSION_LESS 3.2) add_custom_command(TARGET volk_gnsssdr_module POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr_profile ${LOCAL_INSTALL_BASE_DIR}/install/volk_gnsssdr_profile ) else() add_custom_command(TARGET volk_gnsssdr_module POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr_profile ${LOCAL_INSTALL_BASE_DIR}/install/volk_gnsssdr_profile BYPRODUCTS ${LOCAL_INSTALL_BASE_DIR}/install/volk_gnsssdr_profile ) endif() add_custom_command(TARGET volk_gnsssdr_module POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${GNSSSDR_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr-config-info ${LOCAL_INSTALL_BASE_DIR}/install/volk_gnsssdr-config-info ) set_package_properties(VOLKGNSSSDR PROPERTIES PURPOSE "volk_gnsssdr will be built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." ) else() set(ENABLE_ORC OFF) endif() ################################################################################ # Abseil C++ - https://abseil.io/docs/cpp/ ################################################################################ if(NOT CMAKE_VERSION VERSION_LESS 3.24 AND NOT CMAKE_CXX_STANDARD VERSION_LESS 17 AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3.1) AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0.0) AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12) AND NOT ENABLE_OWN_GLOG AND NOT ENABLE_GLOG_AND_GFLAGS) # See https://github.com/google/oss-policies-info/blob/main/foundational-cxx-support-matrix.md if(ENABLE_OWN_ABSEIL) include(FetchContent) set(ABSEIL_BUILD_COMMAND ${CMAKE_COMMAND} "--build" "${GNSSSDR_BINARY_DIR}/abseil-cpp" "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> "--target" "install" ) if(CMAKE_GENERATOR STREQUAL Xcode) set(ABSEIL_BUILD_COMMAND "xcodebuild" "-configuration" $<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:Debug>) endif() if(CMAKE_TOOLCHAIN_FILE) set(ABSEIL_TOOLCHAIN_FILE -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) endif() set(ABSL_PROPAGATE_CXX_STD ON) FetchContent_Declare( absl GIT_REPOSITORY https://github.com/abseil/abseil-cpp GIT_TAG ${GNSSSDR_ABSL_LOCAL_VERSION} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/abseil-cpp CMAKE_ARGS -DABSL_PROPAGATE_CXX_STD=ON -ABSL_BUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=${GNSSSDR_BINARY_DIR}/abseil-cpp ${ABSEIL_TOOLCHAIN_FILE} BINARY_DIR ${GNSSSDR_BINARY_DIR}/abseil-cpp BUILD_COMMAND ${ABSEIL_BUILD_COMMAND} OVERRIDE_FIND_PACKAGE # Requires CMake 3.24 ) FetchContent_MakeAvailable(absl) set(absl_FOUND TRUE) set(ENABLE_GLOG_AND_GFLAGS OFF) else() find_package(absl) set_package_properties(absl PROPERTIES URL "https://github.com/abseil/abseil-cpp" PURPOSE "Making use of Abseil's log and flags libraries." TYPE OPTIONAL ) if(absl_FOUND) set_package_properties(absl PROPERTIES DESCRIPTION "A collection of C++ library code designed to augment the C++ standard library (found: v${absl_VERSION})" ) get_target_property(ABSL_BASE_LIBRARY absl::base INTERFACE_INCLUDE_DIRECTORIES) get_filename_component(ABSL_ROOT_PATH "${ABSL_BASE_LIBRARY}" DIRECTORY) message(STATUS "Found Abseil C++ libraries installed at ${ABSL_ROOT_PATH} (found version: v${absl_VERSION})") else() set_package_properties(absl PROPERTIES DESCRIPTION "A collection of C++ library code designed to augment the C++ standard library" ) endif() if("${absl_VERSION}" VERSION_LESS ${GNSSSDR_ABSEIL_MIN_VERSION}) unset(absl_FOUND CACHE) set(absl_FOUND FALSE) set(ENABLE_GLOG_AND_GFLAGS ON) set_package_properties(absl PROPERTIES DESCRIPTION "A collection of C++ library code designed to augment the C++ standard library (found: v${absl_VERSION}, but it is too old and it will not be used)" ) endif() endif() endif() # Workaround for Clang 18+ if(absl_FOUND AND NOT ENABLE_OWN_ABSEIL) if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "17.99")) add_compile_options(-fclang-abi-compat=17) endif() endif() if(NOT absl_FOUND) set(ENABLE_GLOG_AND_GFLAGS ON) ################################################################################ # gflags - https://github.com/gflags/gflags ################################################################################ set(LOCAL_GFLAGS FALSE) if(ENABLE_OWN_GLOG) unset(Glog::glog CACHE) unset(GLOG_FOUND CACHE) unset(Gflags::gflags CACHE) unset(GLAGS_FOUND CACHE) set(GFLAGS_GREATER_20 TRUE) else() unset(Glog::glog CACHE) unset(GLOG_FOUND CACHE) find_package(GLOG) if(GLOG_FOUND) unset(GFLAGS_GREATER_20 CACHE) find_package(GFLAGS) endif() endif() set_package_properties(GFLAGS PROPERTIES PURPOSE "Used for commandline flags management." TYPE REQUIRED ) if(NOT GFLAGS_FOUND) set(ENABLE_OWN_GLOG ON) if(GFLAGS_VERSION) message(STATUS " A version of the gflags library equal or higher than v${GNSSSDR_GFLAGS_MIN_VERSION} has not been found.") else() message(STATUS " The gflags library has not been found.") endif() message(STATUS " gflags v${GNSSSDR_GFLAGS_LOCAL_VERSION} will be downloaded, built, and statically linked automatically") message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") set(GFLAGS_BUILD_COMMAND ${CMAKE_COMMAND} "--build" "${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}" "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> ) if(CMAKE_GENERATOR STREQUAL Xcode) set(GFLAGS_BUILD_COMMAND "xcodebuild" "-configuration" $<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:Debug>) endif() if(CMAKE_TOOLCHAIN_FILE) set(GFLAGS_TOOLCHAIN_FILE -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) endif() if(CMAKE_VERSION VERSION_LESS 3.2) ExternalProject_Add(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} PREFIX ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} GIT_REPOSITORY https://github.com/gflags/gflags.git GIT_TAG v${GNSSSDR_GFLAGS_LOCAL_VERSION} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gflags/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON -DBUILD_gflags_LIB=ON -DBUILD_gflags_nothreads_LIB=ON -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} ${GFLAGS_TOOLCHAIN_FILE} -DGFLAGS_NAMESPACE=google -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> BUILD_COMMAND ${GFLAGS_BUILD_COMMAND} UPDATE_COMMAND "" PATCH_COMMAND "" INSTALL_COMMAND "" ) else() set(GFLAGS_BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX}) if((CMAKE_BUILD_TYPE STREQUAL Debug) OR (CMAKE_BUILD_TYPE STREQUAL NoOptWithASM) OR (CMAKE_BUILD_TYPE STREQUAL Coverage) OR (CMAKE_BUILD_TYPE STREQUAL ASAN)) # Workaround for Ninja generator set(GFLAGS_BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags_debug${CMAKE_STATIC_LIBRARY_SUFFIX}) endif() if((CMAKE_VERSION VERSION_GREATER 3.12.0) AND NOT (CMAKE_GENERATOR STREQUAL Xcode)) set(PARALLEL_BUILD "--parallel 2") endif() if(CMAKE_VERSION VERSION_LESS 4.0) ExternalProject_Add(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} PREFIX ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} GIT_REPOSITORY https://github.com/gflags/gflags.git GIT_TAG v${GNSSSDR_GFLAGS_LOCAL_VERSION} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gflags/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON -DBUILD_gflags_LIB=ON -DBUILD_gflags_nothreads_LIB=ON -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} ${GFLAGS_TOOLCHAIN_FILE} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> BUILD_COMMAND "${GFLAGS_BUILD_COMMAND} ${PARALLEL_BUILD}" BUILD_BYPRODUCTS ${GFLAGS_BUILD_BYPRODUCTS} UPDATE_COMMAND "" PATCH_COMMAND "" INSTALL_COMMAND "" ) # Note: -DBUILD_gflags_nothreads_LIB=ON is required as a workaround to a bug in gflags 2.2.2. This is fixed in gflags master branch else() ExternalProject_Add(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} PREFIX ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} GIT_REPOSITORY https://github.com/gflags/gflags.git GIT_TAG 52e94563eba1968783864942fedf6e87e3c611f4 SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gflags/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON -DBUILD_gflags_LIB=ON -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} ${GFLAGS_TOOLCHAIN_FILE} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> BUILD_COMMAND "${GFLAGS_BUILD_COMMAND} ${PARALLEL_BUILD}" BUILD_BYPRODUCTS ${GFLAGS_BUILD_BYPRODUCTS} UPDATE_COMMAND "" PATCH_COMMAND "" INSTALL_COMMAND "" ) endif() endif() set(GFlags_INCLUDE_DIRS ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/include CACHE PATH "Local Gflags headers" ) if(CMAKE_VERSION VERSION_LESS "3.0.2") set(GFlags_LIBS ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} ) endif() if(NOT TARGET Gflags::gflags) file(MAKE_DIRECTORY ${GFlags_INCLUDE_DIRS}) add_library(Gflags::gflags STATIC IMPORTED) add_dependencies(Gflags::gflags gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) set_target_properties(Gflags::gflags PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_CONFIGURATIONS "None;Debug;Release;RelWithDebInfo;MinSizeRel" MAP_IMPORTED_CONFIG_NOOPTWITHASM Debug MAP_IMPORTED_CONFIG_COVERAGE Debug MAP_IMPORTED_CONFIG_O2WITHASM RelWithDebInfo MAP_IMPORTED_CONFIG_O3WITHASM RelWithDebInfo MAP_IMPORTED_CONFIG_ASAN Debug IMPORTED_LOCATION_NONE ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags_debug${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_STATIC_LIBRARY_SUFFIX} INTERFACE_INCLUDE_DIRECTORIES ${GFlags_INCLUDE_DIRS} INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags$<$:_debug>${CMAKE_STATIC_LIBRARY_SUFFIX} ) if((CMAKE_GENERATOR STREQUAL Xcode) OR MSVC) if(MSVC) set(MSVC_POSTFIX _static) endif() set_target_properties(Gflags::gflags PROPERTIES IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}_debug${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/Release/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/MinSizeRel/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib/$<$:Debug/>$<$:Release/>$<$:RelWithDebInfo/>$<$:MinSizeRel/>${CMAKE_FIND_LIBRARY_PREFIXES}gflags${MSVC_POSTFIX}$<$:_debug>${CMAKE_STATIC_LIBRARY_SUFFIX} ) endif() endif() if(MSVC) target_link_libraries(Gflags::gflags INTERFACE shlwapi.lib) endif() set(LOCAL_GFLAGS TRUE CACHE STRING "GFlags downloaded, built, and statically linked automatically" FORCE) set_package_properties(GFLAGS PROPERTIES PURPOSE "Gflags v${GNSSSDR_GFLAGS_LOCAL_VERSION} and Glog v${GNSSSDR_GLOG_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." ) if(CMAKE_VERSION VERSION_LESS 3.2) set_property(TARGET Gflags::gflags APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS GFLAGS_OLD_NAMESPACE=1 ) endif() endif() ################################################################################ # glog - https://github.com/google/glog ################################################################################ set_package_properties(GLOG PROPERTIES PURPOSE "Used for runtime internal logging." TYPE REQUIRED ) if(NOT GLOG_FOUND OR ${LOCAL_GFLAGS}) message(STATUS " glog library has not been found") if(NOT GFLAGS_FOUND) message(STATUS " or it is likely not linked to gflags.") endif() message(STATUS " glog v${GNSSSDR_GLOG_LOCAL_VERSION} will be downloaded, built, and statically linked automatically") message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") find_package(LIBUNWIND) set_package_properties(LIBUNWIND PROPERTIES PURPOSE "Needed by glog." TYPE OPTIONAL ) if(NOT ${LOCAL_GFLAGS}) if(NOT TARGET gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) add_library(gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} UNKNOWN IMPORTED) endif() set_property(TARGET gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION} PROPERTY IMPORTED_LOCATION "${GFlags_LIBS}") string(REPLACE /include "" GFLAGS_PREFIX_PATH ${GFlags_INCLUDE_DIRS}) else() set(GFLAGS_PREFIX_PATH ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) endif() set(TARGET_GFLAGS gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}) set(GLOG_MAKE_PROGRAM ${CMAKE_COMMAND} "--build" "${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}" "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> ) if(CMAKE_GENERATOR STREQUAL Xcode) set(GLOG_MAKE_PROGRAM "xcodebuild" "-configuration" $<$:None>$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:NoOptWithASM>$<$:Coverage>$<$:O2WithASM>$<$:O3WithASM>$<$:Debug> ) endif() if(CMAKE_TOOLCHAIN_FILE) set(GLOG_TOOLCHAIN_FILE -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) endif() if(CMAKE_VERSION VERSION_LESS 3.3) if(CMAKE_VERSION VERSION_LESS 3.0) set(GLOG_MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}) set(GFLAGS_LIBRARIES_TO_LINK ${GFlags_LIBS}) if(${LOCAL_GFLAGS}) set(GFLAGS_LIBRARY_DIR_TO_LINK ${GNSSSDR_BINARY_DIR}/gflags-${GNSSSDR_GFLAGS_LOCAL_VERSION}/lib) else() set(GFLAGS_LIBRARY_DIR_TO_LINK ${GFlags_LIBRARY_DIRS}) endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(GFLAGS_LIBRARIES_TO_LINK "${GFLAGS_LIBRARIES_TO_LINK} -lc++") set(GLOG_EXPORT_CXX_LIBRARIES "export CXXFLAGS=\"-stdlib=libc++\"") endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(GLOG_EXPORT_C_COMPILER "export CC=clang") set(GLOG_EXPORT_CXX_COMPILER "export CXX=clang++") endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(GLOG_EXPORT_C_COMPILER "export CC=gcc") set(GLOG_EXPORT_CXX_COMPILER "export CXX=g++") endif() file(WRITE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/tmp/configure_with_gflags "#!/bin/sh export CPPFLAGS=-I${GFlags_INCLUDE_DIRS} export LDFLAGS=-L${GFLAGS_LIBRARY_DIR_TO_LINK} export LIBS=\"${GFLAGS_LIBRARIES_TO_LINK}\" ${GLOG_EXPORT_CXX_LIBRARIES} ${GLOG_EXPORT_C_COMPILER} ${GLOG_EXPORT_CXX_COMPILER} cd ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/ aclocal automake --add-missing autoreconf -vfi cd ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/configure --enable-shared=no" ) file(COPY ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/tmp/configure_with_gflags DESTINATION ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ) set(GLOG_CONFIGURE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/configure_with_gflags) # Ensure that aclocal and libtool are present if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") if(EXISTS "/usr/bin/libtoolize") if(EXISTS "/usr/bin/aclocal" OR EXISTS "/usr/bin/aclocal-1.16" OR EXISTS "/usr/bin/aclocal-1.15" OR EXISTS "/usr/bin/aclocal-1.14" OR EXISTS "/usr/bin/aclocal-1.13" OR EXISTS "/usr/bin/aclocal-1.11" OR EXISTS "/usr/bin/aclocal-1.10") # Everything ok, we can move on else() message(" aclocal has not been found.") message(" You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo yum groupinstall 'Development Tools'") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(" sudo zypper install automake") else() message(" sudo apt install automake") endif() message(FATAL_ERROR "aclocal is required to build glog from source") endif() else() message(" libtool has not been found.") message(" You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo yum groupinstall 'Development Tools'") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(" sudo zypper install libtoool") else() message(" sudo apt install libtool") endif() message(FATAL_ERROR "libtool is required to build glog from source") endif() endif() if(GLOG_MAKE_PROGRAM MATCHES "ninja") find_program(GLOG_MAKE_EXECUTABLE make PATHS /usr/bin /usr/local/bin ) if(NOT GLOG_MAKE_EXECUTABLE) message(FATAL_ERROR "make is required to build Glog from source.") endif() set(GLOG_MAKE_PROGRAM ${GLOG_MAKE_EXECUTABLE}) endif() ExternalProject_Add(glog-${GNSSSDR_GLOG_LOCAL_VERSION} DEPENDS ${TARGET_GFLAGS} PREFIX ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} GIT_REPOSITORY https://github.com/google/glog/ GIT_TAG v${GNSSSDR_GLOG_LOCAL_VERSION} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} CONFIGURE_COMMAND ${GLOG_CONFIGURE} --prefix= BUILD_COMMAND "${GLOG_MAKE_PROGRAM}" UPDATE_COMMAND "" PATCH_COMMAND "" INSTALL_COMMAND "" ) set(GLOG_LIBRARIES ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/.libs/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} ) set(GLOG_INCLUDE_DIRS ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src ) else() # CMake > 3.0 but < 3.3 ExternalProject_Add(glog-${GNSSSDR_GLOG_LOCAL_VERSION} DEPENDS ${TARGET_GFLAGS} PREFIX ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} GIT_REPOSITORY https://github.com/google/glog/ GIT_TAG v${GNSSSDR_GLOG_LOCAL_VERSION} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_PREFIX_PATH=${GFLAGS_PREFIX_PATH} ${GLOG_TOOLCHAIN_FILE} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> BUILD_COMMAND ${GLOG_MAKE_PROGRAM} UPDATE_COMMAND "" PATCH_COMMAND "" INSTALL_COMMAND "" ) set(GLOG_INCLUDE_DIRS ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} ${GFlags_INCLUDE_DIRS} ) endif() else() # CMake > 3.3 set(GLOG_BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} ) if((CMAKE_BUILD_TYPE STREQUAL Debug) OR (CMAKE_BUILD_TYPE STREQUAL NoOptWithASM) OR (CMAKE_BUILD_TYPE STREQUAL Coverage) OR (CMAKE_BUILD_TYPE STREQUAL ASAN)) # Workaround for Ninja generator set(GLOG_BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glogd${CMAKE_STATIC_LIBRARY_SUFFIX} ) endif() if((CMAKE_VERSION VERSION_GREATER 3.12.0) AND NOT (CMAKE_GENERATOR STREQUAL Xcode) AND NOT CMAKE_CROSSCOMPILING) set(PARALLEL_BUILD "--parallel 2") endif() if(GNSSSDR_GLOG_LOCAL_VERSION VERSION_GREATER 0.5.0) set(GLOG_GTEST -DWITH_GTEST=FALSE) endif() if(NOT (CMAKE_VERSION VERSION_LESS "3.22")) set(GNSSSDR_GLOG_LOCAL_GFLAGS -DCMAKE_REQUIRED_INCLUDES=${GFlags_INCLUDE_DIRS}) endif() ExternalProject_Add(glog-${GNSSSDR_GLOG_LOCAL_VERSION} DEPENDS ${TARGET_GFLAGS} PREFIX ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} GIT_REPOSITORY https://github.com/google/glog/ GIT_TAG v${GNSSSDR_GLOG_LOCAL_VERSION} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_PREFIX_PATH=${GFLAGS_PREFIX_PATH} ${GLOG_TOOLCHAIN_FILE} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> -DBUILD_SHARED_LIBS=OFF ${GLOG_GTEST} -DBUILD_TESTING=OFF "${GNSSSDR_GLOG_LOCAL_GFLAGS}" BUILD_COMMAND "${GLOG_MAKE_PROGRAM} ${PARALLEL_BUILD}" BUILD_BYPRODUCTS ${GLOG_BUILD_BYPRODUCTS} UPDATE_COMMAND "" PATCH_COMMAND "" INSTALL_COMMAND "" ) set(GLOG_INCLUDE_DIRS ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION} ${GFlags_INCLUDE_DIRS} ) endif() add_dependencies(glog-${GNSSSDR_GLOG_LOCAL_VERSION} Gflags::gflags) # Create Glog::glog target if(NOT TARGET Glog::glog) file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/thirdparty/glog/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/src) file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}) add_library(Glog::glog STATIC IMPORTED) add_dependencies(Glog::glog glog-${GNSSSDR_GLOG_LOCAL_VERSION}) if(CMAKE_VERSION VERSION_LESS 3.0) set_target_properties(Glog::glog PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GLOG_LIBRARIES}" INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIRS}" INTERFACE_INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${GLOG_LIBRARIES}" ) else() set_target_properties(Glog::glog PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_CONFIGURATIONS "None;Debug;Release;RelWithDebInfo;MinSizeRel" MAP_IMPORTED_CONFIG_NOOPTWITHASM Debug MAP_IMPORTED_CONFIG_COVERAGE Debug MAP_IMPORTED_CONFIG_O2WITHASM RelWithDebInfo MAP_IMPORTED_CONFIG_O3WITHASM RelWithDebInfo MAP_IMPORTED_CONFIG_ASAN Debug IMPORTED_LOCATION_NONE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glogd${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} INTERFACE_INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}glog$<$:d>${CMAKE_STATIC_LIBRARY_SUFFIX} ) if((CMAKE_GENERATOR STREQUAL Xcode) OR MSVC) set_target_properties(Glog::glog PROPERTIES IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}glogd${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/Release/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/MinSizeRel/${CMAKE_FIND_LIBRARY_PREFIXES}glog${CMAKE_STATIC_LIBRARY_SUFFIX} INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/glog-${GNSSSDR_GLOG_LOCAL_VERSION}/$<$:Debug/>$<$:Release/>$<$:RelWithDebInfo/>$<$:MinSizeRel/>${CMAKE_FIND_LIBRARY_PREFIXES}glog$<$:d>${CMAKE_STATIC_LIBRARY_SUFFIX} ) endif() endif() endif() if(NOT (CMAKE_VERSION VERSION_LESS "3.22")) set_target_properties(Glog::glog PROPERTIES INTERFACE_COMPILE_DEFINITIONS "GLOG_USE_GLOG_EXPORT;GLOG_USE_GFLAGS" INTERFACE_COMPILE_FEATURES "cxx_std_14") endif() if(LIBUNWIND_FOUND) target_link_libraries(Glog::glog INTERFACE Libunwind::libunwind) endif() set(LOCAL_GLOG TRUE CACHE STRING "Glog downloaded, built, and statically linked automatically" FORCE) set_package_properties(GLOG PROPERTIES PURPOSE "Glog v${GNSSSDR_GLOG_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." ) endif() endif() ################################################################################ # Check that BLAS (Basic Linear Algebra Subprograms) is found in the system # See https://www.netlib.org/blas/ ################################################################################ if((${CMAKE_SYSTEM_NAME} MATCHES "Darwin") AND ("${DARWIN_VERSION}" VERSION_LESS "23")) # Avoid using the implementation that comes with the Accelerate framework include(AvoidAccelerate) else() if(NOT BLA_VENDOR) set(BLA_VENDOR "Generic") endif() if(NOT CMAKE_CROSSCOMPILING AND NOT DEFINED BLA_PREFER_PKGCONFIG) set(BLA_PREFER_PKGCONFIG ON) # Required by riscv64 arch endif() find_package(BLAS) set_package_properties(BLAS PROPERTIES URL "https://www.netlib.org/blas/" DESCRIPTION "Basic Linear Algebra Subprograms" PURPOSE "Used for matrix algebra computations." TYPE REQUIRED ) endif() if(NOT BLAS_FOUND) message(" The BLAS library has not been found.") message(" You can try to install it by typing:") if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") message(" 'sudo port install lapack' if you are using Macports, or") message(" 'brew install lapack' if you are using Homebrew.") else() if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo yum install blas-devel") else() message(" sudo apt install libblas-dev") endif() endif() message(FATAL_ERROR "BLAS is required to build gnss-sdr") endif() if(NOT TARGET BLAS::BLAS) add_library(BLAS::BLAS SHARED IMPORTED) set_target_properties(BLAS::BLAS PROPERTIES IMPORTED_LOCATION ${BLAS_LIBRARIES} INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES} ) endif() ################################################################################ # Check that LAPACK (Linear Algebra PACKage) is found in the system # See https://www.netlib.org/lapack/ ################################################################################ if(NOT((${CMAKE_SYSTEM_NAME} MATCHES "Darwin") AND ("${DARWIN_VERSION}" VERSION_LESS "23"))) find_package(LAPACK) set_package_properties(LAPACK PROPERTIES URL "https://www.netlib.org/lapack/" DESCRIPTION "Linear Algebra PACKage" PURPOSE "Used for matrix algebra computations." TYPE REQUIRED ) endif() if(NOT LAPACK_FOUND) message(" The LAPACK library has not been found.") if(LINUX_DISTRIBUTION) message(" You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo yum install lapack-devel") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(" sudo zypper install lapack-devel") else() message(" sudo apt install liblapack-dev") endif() endif() message(FATAL_ERROR "LAPACK is required to build gnss-sdr") endif() if(NOT TARGET LAPACK::LAPACK) add_library(LAPACK::LAPACK SHARED IMPORTED) set_target_properties(LAPACK::LAPACK PROPERTIES IMPORTED_LOCATION ${LAPACK_LIBRARIES} INTERFACE_LINK_LIBRARIES ${LAPACK_LIBRARIES} ) endif() ################################################################################ # Armadillo - https://arma.sourceforge.net/ ################################################################################ if(ENABLE_OWN_ARMADILLO) unset(Armadillo::armadillo CACHE) unset(ARMADILLO_FOUND CACHE) else() unset(Armadillo::armadillo CACHE) unset(ARMADILLO_FOUND CACHE) find_package(Armadillo) endif() set_package_properties(Armadillo PROPERTIES URL "https://arma.sourceforge.net/" PURPOSE "Used for matrix computations." TYPE REQUIRED ) if(ARMADILLO_FOUND) set_package_properties(Armadillo PROPERTIES DESCRIPTION "C++ library for linear algebra and scientific computing (found: v${ARMADILLO_VERSION_STRING})" ) if(${ARMADILLO_VERSION_STRING} VERSION_LESS ${GNSSSDR_ARMADILLO_MIN_VERSION}) unset(Armadillo::armadillo CACHE) unset(ARMADILLO_FOUND CACHE) set(ENABLE_OWN_ARMADILLO ON) message(STATUS " Armadillo >= v${GNSSSDR_ARMADILLO_MIN_VERSION} has not been found.") else() if(NOT ENABLE_OWN_ARMADILLO) add_library(Armadillo::armadillo SHARED IMPORTED) set_target_properties(Armadillo::armadillo PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${ARMADILLO_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${ARMADILLO_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${ARMADILLO_LIBRARIES}" ) endif() endif() else() message(STATUS " Armadillo has not been found.") endif() if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO) message(STATUS " Armadillo ${GNSSSDR_ARMADILLO_LOCAL_VERSION} will be downloaded, built, and statically linked automatically") message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") set(armadillo_BRANCH ${GNSSSDR_ARMADILLO_LOCAL_VERSION}) set(armadillo_RELEASE ${armadillo_BRANCH}) ############################################# # Check if GFORTRAN is found in the system ############################################# if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") AND NOT MSVC) find_package(GFORTRAN) set_package_properties(GFORTRAN PROPERTIES PURPOSE "Required by Armadillo." TYPE REQUIRED ) if(NOT GFORTRAN) message(STATUS "The gfortran library has not been found.") message(STATUS " You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(STATUS " sudo yum install gcc-fortran") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(STATUS " sudo zypper install gcc-fortran") else() message(STATUS " sudo apt install gfortran") endif() message(FATAL_ERROR "gfortran is required to build gnss-sdr") endif() endif() ############################################# # Download and build Armadillo ############################################# set(ARMADILLO_BUILD_COMMAND ${CMAKE_COMMAND} "--build" "${GNSSSDR_BINARY_DIR}/armadillo-${armadillo_RELEASE}" "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> "--target" install ) if(CMAKE_TOOLCHAIN_FILE) set(ARMADILLO_TOOLCHAIN_FILE -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) else() set(ARMADILLO_TOOLCHAIN_FILE "") endif() set(ARMADILLO_CXX_VERSION "") if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 4.8.3) set(ARMADILLO_CXX_VERSION -DCMAKE_CXX_FLAGS=-std=c++11) endif() if(CMAKE_VERSION VERSION_LESS 3.2) ExternalProject_Add(armadillo-${armadillo_RELEASE} PREFIX ${GNSSSDR_BINARY_DIR}/armadillo-${armadillo_RELEASE} GIT_REPOSITORY https://gitlab.com/conradsnicta/armadillo-code.git GIT_TAG ${armadillo_BRANCH} UPDATE_COMMAND "" SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/armadillo/armadillo-${armadillo_RELEASE} BINARY_DIR ${GNSSSDR_BINARY_DIR}/armadillo-${armadillo_RELEASE} CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> -DCMAKE_INSTALL_PREFIX=${GNSSSDR_BINARY_DIR}/armadillo-${armadillo_RELEASE} -DBUILD_SHARED_LIBS=OFF -DBUILD_SMOKE_TEST=OFF -DALLOW_BLAS_LAPACK_MACOS=ON ${ARMADILLO_CXX_VERSION} ${ARMADILLO_TOOLCHAIN_FILE} BUILD_COMMAND ${ARMADILLO_BUILD_COMMAND} INSTALL_COMMAND "" ) else() ExternalProject_Add(armadillo-${armadillo_RELEASE} PREFIX ${GNSSSDR_BINARY_DIR}/armadillo-${armadillo_RELEASE} GIT_REPOSITORY https://gitlab.com/conradsnicta/armadillo-code.git GIT_TAG ${armadillo_BRANCH} UPDATE_COMMAND "" SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/armadillo/armadillo-${armadillo_RELEASE} BINARY_DIR ${GNSSSDR_BINARY_DIR}/armadillo-${armadillo_RELEASE} CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> -DCMAKE_INSTALL_PREFIX=${GNSSSDR_BINARY_DIR}/armadillo-${armadillo_RELEASE} -DSTATIC_LIB=ON -DBUILD_SMOKE_TEST=OFF -DALLOW_BLAS_LAPACK_MACOS=ON ${ARMADILLO_CXX_VERSION} ${ARMADILLO_TOOLCHAIN_FILE} BUILD_COMMAND ${ARMADILLO_BUILD_COMMAND} BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/armadillo-${armadillo_RELEASE}/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX} INSTALL_COMMAND "" ) endif() # Create imported target ExternalProject_Get_Property(armadillo-${armadillo_RELEASE} binary_dir) if(NOT GFORTRAN) set(GFORTRAN "") endif() set(ARMADILLO_STATIC_LIBRARY ${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX}) set(LOCAL_ARMADILLO TRUE CACHE STRING "Armadillo downloaded, built, and statically linked automatically" FORCE) set(ARMADILLO_VERSION_STRING ${armadillo_RELEASE}) file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/thirdparty/armadillo/armadillo-${armadillo_RELEASE}/include) add_library(Armadillo::armadillo STATIC IMPORTED) add_dependencies(Armadillo::armadillo armadillo-${armadillo_RELEASE}) set_target_properties(Armadillo::armadillo PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_CONFIGURATIONS "None;Debug;Release;RelWithDebInfo;MinSizeRel" MAP_IMPORTED_CONFIG_NOOPTWITHASM Debug MAP_IMPORTED_CONFIG_COVERAGE Debug MAP_IMPORTED_CONFIG_O2WITHASM RelWithDebInfo MAP_IMPORTED_CONFIG_O3WITHASM RelWithDebInfo MAP_IMPORTED_CONFIG_ASAN Debug IMPORTED_LOCATION_NONE ${ARMADILLO_STATIC_LIBRARY} IMPORTED_LOCATION_DEBUG ${ARMADILLO_STATIC_LIBRARY} IMPORTED_LOCATION_RELEASE ${ARMADILLO_STATIC_LIBRARY} IMPORTED_LOCATION_RELWITHDEBINFO ${ARMADILLO_STATIC_LIBRARY} IMPORTED_LOCATION_MINSIZEREL ${ARMADILLO_STATIC_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES ${GNSSSDR_BINARY_DIR}/thirdparty/armadillo/armadillo-${armadillo_RELEASE}/include INTERFACE_LINK_LIBRARIES "${BLAS_LIBRARIES};${LAPACK_LIBRARIES};${GFORTRAN};${ARMADILLO_STATIC_LIBRARY}" ) if((CMAKE_GENERATOR STREQUAL Xcode) OR MSVC) set_target_properties(Armadillo::armadillo PROPERTIES IMPORTED_LOCATION_DEBUG ${binary_dir}/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELEASE ${binary_dir}/Release/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELWITHDEBINFO ${binary_dir}/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_MINSIZEREL ${binary_dir}/MinSizeRel/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX} INTERFACE_LINK_LIBRARIES "${BLAS_LIBRARIES};${LAPACK_LIBRARIES};${GFORTRAN};${binary_dir}/$<$:Debug/>$<$:Release/>$<$:RelWithDebInfo/>$<$:MinSizeRel/>${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX}" ) endif() set_package_properties(Armadillo PROPERTIES DESCRIPTION "C++ library for linear algebra and scientific computing" PURPOSE "Armadillo ${GNSSSDR_ARMADILLO_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." ) # Fix for macOS find_library(ARPACK_LIBRARY NAMES arpack PATHS ${CMAKE_SYSTEM_LIBRARY_PATH} ${GNSSSDR_LIB_PATHS} ) if(ARPACK_LIBRARY) target_link_libraries(Armadillo::armadillo INTERFACE ${ARPACK_LIBRARY}) endif() find_library(FLEXIBLAS_LIBRARY NAMES flexiblas PATHS ${CMAKE_SYSTEM_LIBRARY_PATH} ${GNSSSDR_LIB_PATHS} ) if(FLEXIBLAS_LIBRARY) target_link_libraries(Armadillo::armadillo INTERFACE ${FLEXIBLAS_LIBRARY}) endif() find_library(SUPERLU_LIBRARY NAMES superlu PATHS ${CMAKE_SYSTEM_LIBRARY_PATH} ${GNSSSDR_LIB_PATHS} ) if(SUPERLU_LIBRARY) target_link_libraries(Armadillo::armadillo INTERFACE ${SUPERLU_LIBRARY}) endif() endif() ################################################################################ # OpenSSL https://www.openssl.org/ or GnuTLS - https://www.gnutls.org/ ################################################################################ include(GnsssdrCrypto) ################################################################################ # Matio - https://github.com/tbeu/matio ################################################################################ find_package(MATIO) set_package_properties(MATIO PROPERTIES PURPOSE "Used to store processing block's results in MAT files readable from MATLAB/Octave." TYPE REQUIRED ) if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERSION}) if(MATIO_FOUND) message(STATUS " Matio installed version (${MATIO_VERSION_STRING}) is too old (>= ${GNSSSDR_MATIO_MIN_VERSION} is required).") endif() message(STATUS " Matio v${GNSSSDR_MATIO_LOCAL_VERSION} will be downloaded, built, and statically linked automatically") message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") set_package_properties(MATIO PROPERTIES PURPOSE "Matio v${GNSSSDR_MATIO_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." ) # Find ZLIB library https://github.com/madler/zlib find_package(ZLIB) set_package_properties(ZLIB PROPERTIES URL "https://www.zlib.net/" PURPOSE "Required to build Matio." TYPE REQUIRED ) if(ZLIB_FOUND AND ZLIB_VERSION_STRING) set_package_properties(ZLIB PROPERTIES DESCRIPTION "A Massively Spiffy Yet Delicately Unobtrusive Compression Library (found: v${ZLIB_VERSION_STRING})" ) else() set_package_properties(ZLIB PROPERTIES DESCRIPTION "A Massively Spiffy Yet Delicately Unobtrusive Compression Library" ) endif() if(NOT ZLIB_FOUND) message(FATAL_ERROR "*** The zlib library is required to build Matio from source.") endif() # Find HDF5 library find_package(HDF5) set_package_properties(HDF5 PROPERTIES URL "https://support.hdfgroup.org/HDF5/" PURPOSE "Required to build Matio." TYPE REQUIRED ) if(HDF5_FOUND AND HDF5_VERSION) set_package_properties(HDF5 PROPERTIES DESCRIPTION "A versatile data model, a portable file format and a software library (found: v${HDF5_VERSION})" ) else() set_package_properties(HDF5 PROPERTIES DESCRIPTION "A versatile data model, a portable file format and a software library" ) endif() if(NOT HDF5_FOUND) message(STATUS " The hdf5 library has not been found in your system.") message(STATUS " Please try to install it by doing:") if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") message(STATUS " $ sudo port install hdf5") message(STATUS " or") message(STATUS " $ brew install hdf5") endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat" OR ${LINUX_DISTRIBUTION} MATCHES "CentOS") message(STATUS " sudo yum install hdf5-devel") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(STATUS " sudo zypper install hdf5-devel") else() message(STATUS " sudo apt install libhdf5-dev") endif() endif() message(FATAL_ERROR "*** The hdf5 library is required to build Matio from source.") endif() if(CMAKE_VERSION VERSION_LESS 3.7 OR "${HDF5_VERSION}" VERSION_LESS "1.8.13") get_filename_component(ZLIB_BASE_DIR ${ZLIB_INCLUDE_DIRS} DIRECTORY) if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") if(NOT EXISTS "/usr/bin/libtoolize") message(" libtool has not been found.") message(" You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo yum groupinstall 'Development Tools'") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(" sudo zypper install libtoool") else() message(" sudo apt install libtool") endif() message(FATAL_ERROR "libtool is required to build matio from source.") endif() if(EXISTS "/usr/bin/aclocal" OR EXISTS "/usr/bin/aclocal-1.16" OR EXISTS "/usr/bin/aclocal-1.15" OR EXISTS "/usr/bin/aclocal-1.14" OR EXISTS "/usr/bin/aclocal-1.13" OR EXISTS "/usr/bin/aclocal-1.11" OR EXISTS "/usr/bin/aclocal-1.10") message(STATUS "Automake found.") else() message(" aclocal has not been found.") message(" You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo yum groupinstall 'Development Tools'") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(" sudo zypper install automake") else() message(" sudo apt install automake") endif() message(FATAL_ERROR "aclocal is required to build matio from source.") endif() endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") if((NOT EXISTS /usr/local/bin/glibtoolize AND NOT EXISTS ${MACOS_PACKAGES_PREFIX}/bin/glibtoolize) OR (NOT EXISTS /usr/local/bin/aclocal AND NOT EXISTS ${MACOS_PACKAGES_PREFIX}/bin/aclocal)) message(" libtool/automake tools have not been found.") message(" You can try to install them by typing:") message(" 'sudo port install libtool automake', if you use Macports, or 'brew install libtool automake', if you use Homebrew") message(FATAL_ERROR "libtool/automake tools are required to build matio from source") endif() if(CMAKE_GENERATOR STREQUAL Xcode) if(EXISTS ${MACOS_PACKAGES_PREFIX}/bin/glibtoolize OR EXISTS ${MACOS_PACKAGES_PREFIX}/bin/aclocal) if(NOT EXISTS /usr/local/bin/glibtoolize OR NOT EXISTS /usr/local/bin/aclocal) message(" WARNING: libtool/atomake binaries cannot be found by Xcode. Please do:") message("sudo ln -s ${MACOS_PACKAGES_PREFIX}/bin/glibtoolize /usr/local/bin/") message("sudo ln -s ${MACOS_PACKAGES_PREFIX}/bin/aclocal /usr/local/bin/") message("sudo ln -s ${MACOS_PACKAGES_PREFIX}/bin/autom4te /usr/local/bin/") message("sudo ln -s ${MACOS_PACKAGES_PREFIX}/bin/automake /usr/local/bin/") message("sudo ln -s ${MACOS_PACKAGES_PREFIX}/bin/autoconf /usr/local/bin/") message("sudo ln -s ${MACOS_PACKAGES_PREFIX}/bin/autoreconf /usr/local/bin/") # not needed by Matio, but by Protocol Buffers message(FATAL_ERROR "libtool/automake tools cannot be found by Xcode") endif() endif() endif() endif() list(GET HDF5_LIBRARIES 0 HDF5_FIRST_DIR) get_filename_component(HDF5_BASE_DIR2 ${HDF5_FIRST_DIR} DIRECTORY) get_filename_component(HDF5_BASE_DIR ${HDF5_BASE_DIR2} DIRECTORY) if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") if(EXISTS ${MACOS_PACKAGES_PREFIX}/include/hdf5.h) set(HDF5_BASE_DIR ${MACOS_PACKAGES_PREFIX}) endif() if(EXISTS /usr/local/include/hdf5.h) set(HDF5_BASE_DIR /usr/local) endif() endif() set(MATIO_MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}) if(MATIO_MAKE_PROGRAM MATCHES "ninja" OR CMAKE_GENERATOR STREQUAL Xcode) find_program(MATIO_MAKE_EXECUTABLE make PATHS /usr/bin /usr/local/bin ) if(NOT MATIO_MAKE_EXECUTABLE) message(FATAL_ERROR "make is required to build Matio from source.") endif() set(MATIO_MAKE_PROGRAM ${MATIO_MAKE_EXECUTABLE}) endif() set(MATIO_STATIC_LIB ${GNSSSDR_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX}) ExternalProject_Add(matio-${GNSSSDR_MATIO_LOCAL_VERSION} PREFIX ${GNSSSDR_BINARY_DIR}/matio GIT_REPOSITORY https://github.com/tbeu/matio GIT_TAG v${GNSSSDR_MATIO_LOCAL_VERSION} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION} UPDATE_COMMAND ${GNSSSDR_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/autogen.sh CONFIGURE_COMMAND ${GNSSSDR_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/configure --with-hdf5=${HDF5_BASE_DIR} --with-zlib=${ZLIB_BASE_DIR} --with-default-file-ver=7.3 --enable-mat73=yes --prefix= BUILD_COMMAND ${MATIO_MAKE_PROGRAM} ) file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/matio/lib) else() # CMake >= 3.7 include(GNUInstallDirs) set(MATIO_STATIC_LIB ${GNSSSDR_BINARY_DIR}/matio/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX}) if("${HDF5_VERSION}" VERSION_GREATER "1.8.18" AND "${HDF5_VERSION}" VERSION_LESS "1.10.4") # weird workaround, but it works in all tested distros (Ubuntu, Debian, Fedora, CentOS, OpenSUSE) set(EXTRA_MATIO_BUILD_FLAGS -DMATIO_WITH_ZLIB=OFF -DHAVE_ZLIB=1) endif() ExternalProject_Add(matio-${GNSSSDR_MATIO_LOCAL_VERSION} PREFIX ${GNSSSDR_BINARY_DIR}/matio GIT_REPOSITORY https://github.com/tbeu/matio GIT_TAG v${GNSSSDR_MATIO_LOCAL_VERSION} UPDATE_COMMAND "" SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/matio CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> -DMATIO_SHARED=OFF "${EXTRA_MATIO_BUILD_FLAGS}" -DHDF5_USE_STATIC_LIBRARIES=OFF -DMATIO_DEFAULT_FILE_VERSION:STRING=7.3 -DMATIO_MAT73=ON -DMATIO_BUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=${GNSSSDR_BINARY_DIR}/matio BUILD_COMMAND ${CMAKE_COMMAND} "--build" "${GNSSSDR_BINARY_DIR}/matio" "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> BUILD_BYPRODUCTS ${MATIO_STATIC_LIB} ) file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/matio/${CMAKE_INSTALL_LIBDIR}) endif() if(NOT TARGET Matio::matio) file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/matio/include) add_library(Matio::matio STATIC IMPORTED) add_dependencies(Matio::matio matio-${GNSSSDR_MATIO_LOCAL_VERSION}) set_target_properties(Matio::matio PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION ${MATIO_STATIC_LIB} INTERFACE_INCLUDE_DIRECTORIES ${GNSSSDR_BINARY_DIR}/matio/include INTERFACE_LINK_LIBRARIES "${MATIO_STATIC_LIB};${HDF5_LIBRARIES};${ZLIB_LIBRARIES}" ) endif() endif() ################################################################################ # PugiXML - https://pugixml.org/ ################################################################################ find_package(PUGIXML) set_package_properties(PUGIXML PROPERTIES PURPOSE "Used to handle Galileo almanac XML files published by the European GNSS Service Centre." TYPE REQUIRED ) if(NOT PUGIXML_FOUND) message(STATUS " PugiXML v${GNSSSDR_PUGIXML_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") set(PUGIXML_COMPILER -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}) set(PUGIXML_CMAKE_FLAGS "") if(DEFINED ENV{OECORE_TARGET_SYSROOT}) set(PUGIXML_COMPILER "") if(NOT CMAKE_TOOLCHAIN_FILE) set(PUGIXML_CMAKE_FLAGS "-DCMAKE_TOOLCHAIN_FILE=${GNSSSDR_SOURCE_DIR}/cmake/Toolchains/oe-sdk_cross.cmake") else() set(PUGIXML_CMAKE_FLAGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}") endif() else() if(CMAKE_TOOLCHAIN_FILE) set(PUGIXML_CMAKE_FLAGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}") endif() endif() set(PUGIXML_BUILD_COMMAND ${CMAKE_COMMAND} "--build" "${GNSSSDR_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}" "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> ) if(CMAKE_VERSION VERSION_LESS 3.2) ExternalProject_Add(pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION} PREFIX ${GNSSSDR_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION} GIT_REPOSITORY https://github.com/zeux/pugixml GIT_TAG v${GNSSSDR_PUGIXML_LOCAL_VERSION} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/pugixml/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION} CMAKE_ARGS ${PUGIXML_COMPILER} ${PUGIXML_CMAKE_FLAGS} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> UPDATE_COMMAND "" PATCH_COMMAND "" BUILD_COMMAND ${PUGIXML_BUILD_COMMAND} INSTALL_COMMAND "" ) else() if(CMAKE_VERSION VERSION_GREATER 3.12.0) set(PARALLEL_BUILD "--parallel 2") endif() ExternalProject_Add(pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION} PREFIX ${GNSSSDR_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION} GIT_REPOSITORY https://github.com/zeux/pugixml GIT_TAG v${GNSSSDR_PUGIXML_LOCAL_VERSION} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/pugixml/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION} CMAKE_ARGS ${PUGIXML_COMPILER} ${PUGIXML_CMAKE_FLAGS} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> UPDATE_COMMAND "" PATCH_COMMAND "" BUILD_COMMAND "${PUGIXML_BUILD_COMMAND} ${PARALLEL_BUILD}" BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}pugixml${CMAKE_STATIC_LIBRARY_SUFFIX} INSTALL_COMMAND "" ) endif() set(PUGIXML_LIBRARIES ${GNSSSDR_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/${CMAKE_FIND_LIBRARY_PREFIXES}pugixml${CMAKE_STATIC_LIBRARY_SUFFIX}) if(NOT TARGET Pugixml::pugixml) file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/thirdparty/pugixml/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/src) add_library(Pugixml::pugixml STATIC IMPORTED) add_dependencies(Pugixml::pugixml pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}) set_target_properties(Pugixml::pugixml PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_CONFIGURATIONS "None;Debug;Release;RelWithDebInfo;MinSizeRel" MAP_IMPORTED_CONFIG_NOOPTWITHASM Debug MAP_IMPORTED_CONFIG_COVERAGE Debug MAP_IMPORTED_CONFIG_O2WITHASM RelWithDebInfo MAP_IMPORTED_CONFIG_O3WITHASM RelWithDebInfo MAP_IMPORTED_CONFIG_ASAN Debug IMPORTED_LOCATION_NONE ${PUGIXML_LIBRARIES} IMPORTED_LOCATION_DEBUG ${PUGIXML_LIBRARIES} IMPORTED_LOCATION_RELEASE ${PUGIXML_LIBRARIES} IMPORTED_LOCATION_RELWITHDEBINFO ${PUGIXML_LIBRARIES} IMPORTED_LOCATION_MINSIZEREL ${PUGIXML_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES ${GNSSSDR_BINARY_DIR}/thirdparty/pugixml/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/src INTERFACE_LINK_LIBRARIES ${PUGIXML_LIBRARIES} ) if((CMAKE_GENERATOR STREQUAL Xcode) OR MSVC) set_target_properties(Pugixml::pugixml PROPERTIES IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}pugixml${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/Release/${CMAKE_FIND_LIBRARY_PREFIXES}pugixml${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}pugixml${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/MinSizeRel/${CMAKE_FIND_LIBRARY_PREFIXES}pugixml${CMAKE_STATIC_LIBRARY_SUFFIX} INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/pugixml-${GNSSSDR_PUGIXML_LOCAL_VERSION}/$<$:Debug/>$<$:Release/>$<$:RelWithDebInfo/>$<$:MinSizeRel/>${CMAKE_FIND_LIBRARY_PREFIXES}pugixml${CMAKE_STATIC_LIBRARY_SUFFIX} ) endif() endif() set_package_properties(PUGIXML PROPERTIES PURPOSE "PugiXML v${GNSSSDR_PUGIXML_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." ) endif() ################################################################################ # Protocol Buffers https://github.com/protocolbuffers/protobuf ################################################################################ if(((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0.0")) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0")) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11"))) if(CMAKE_VERSION VERSION_LESS 3.19) find_package(Protobuf) else() find_package(Protobuf 3.0...21.12) endif() else() find_package(Protobuf) if((CMAKE_BUILD_TYPE STREQUAL "Debug") AND Protobuf_FOUND AND absl_FOUND) # This Regular Expression is used to convert the version string provided by `find_package(Protobuf)` into the # appropriate binary version string. So, for instance, "4.25.3" becomes "25.3.0". string(REGEX REPLACE "^[0-9]+\.([0-9]+\.[0-9]+)$" "\\1.0" PROTOBUF_LIBRARY_VERSION "${Protobuf_VERSION}") if((PROTOBUF_LIBRARY_VERSION VERSION_GREATER_EQUAL "22") AND (PROTOBUF_LIBRARY_VERSION VERSION_LESS "26")) pkg_check_modules(protobuf REQUIRED IMPORTED_TARGET protobuf=${PROTOBUF_LIBRARY_VERSION}) target_link_libraries(protobuf::libprotobuf INTERFACE PkgConfig::protobuf) endif() endif() endif() set_package_properties(Protobuf PROPERTIES URL "https://protobuf.dev/" PURPOSE "Used to serialize output data in a way that can be read by other applications." TYPE REQUIRED ) if(NOT Protobuf_VERSION) set(Protobuf_VERSION "0.0.0") endif() if(CMAKE_VERSION VERSION_LESS 3.6) if(PROTOBUF_FOUND) set(Protobuf_FOUND ${PROTOBUF_FOUND}) endif() endif() if(Protobuf_FOUND AND CMAKE_VERSION VERSION_LESS 3.9) if(PROTOBUF_INCLUDE_DIR) set(Protobuf_INCLUDE_DIR ${PROTOBUF_INCLUDE_DIR}) endif() if(PROTOBUF_LIBRARY) set(Protobuf_LIBRARY ${PROTOBUF_LIBRARY}) endif() if(PROTOBUF_PROTOC_EXECUTABLE) set(Protobuf_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE}) endif() if(PROTOBUF_PROTOC_LIBRARY) set(Protobuf_PROTOC_LIBRARY ${PROTOBUF_PROTOC_EXECUTABLE}) endif() add_library(protobuf::libprotobuf SHARED IMPORTED) set_target_properties(protobuf::libprotobuf PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${Protobuf_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${Protobuf_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${Protobuf_LIBRARY}" ) add_executable(protobuf::protoc IMPORTED) set_target_properties(protobuf::protoc PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${Protobuf_PROTOC_EXECUTABLE}" INTERFACE_LINK_LIBRARIES "${Protobuf_PROTOC_LIBRARY}" ) if(${Protobuf_VERSION} VERSION_EQUAL "0.0.0") set(_PROTOBUF_COMMON_HEADER ${Protobuf_INCLUDE_DIR}/google/protobuf/stubs/common.h) set(Protobuf_VERSION "") set(Protobuf_LIB_VERSION "") file(STRINGS ${_PROTOBUF_COMMON_HEADER} _PROTOBUF_COMMON_H_CONTENTS REGEX "#define[ \t]+GOOGLE_PROTOBUF_VERSION[ \t]+") if(_PROTOBUF_COMMON_H_CONTENTS MATCHES "#define[ \t]+GOOGLE_PROTOBUF_VERSION[ \t]+([0-9]+)") set(Protobuf_LIB_VERSION "${CMAKE_MATCH_1}") endif() unset(_PROTOBUF_COMMON_H_CONTENTS) math(EXPR _PROTOBUF_MAJOR_VERSION "${Protobuf_LIB_VERSION} / 1000000") math(EXPR _PROTOBUF_MINOR_VERSION "${Protobuf_LIB_VERSION} / 1000 % 1000") math(EXPR _PROTOBUF_SUBMINOR_VERSION "${Protobuf_LIB_VERSION} % 1000") set(Protobuf_VERSION "${_PROTOBUF_MAJOR_VERSION}.${_PROTOBUF_MINOR_VERSION}.${_PROTOBUF_SUBMINOR_VERSION}") endif() endif() if(Protobuf_FOUND) set_package_properties(Protobuf PROPERTIES DESCRIPTION "Structured data serialization mechanism (found: v${Protobuf_VERSION})" ) else() set_package_properties(Protobuf PROPERTIES DESCRIPTION "Structured data serialization mechanism" ) endif() if(Protobuf_FOUND AND CMAKE_CROSSCOMPILING) find_program(PROTOC_EXECUTABLE protoc) if(NOT PROTOC_EXECUTABLE) find_program(PROTOC_EXECUTABLE protoc PATHS /usr/bin /usr/local/bin ) endif() if(PROTOC_EXECUTABLE) set_target_properties(protobuf::protoc PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION ${PROTOC_EXECUTABLE} ) set(Protobuf_PROTOC_EXECUTABLE ${PROTOC_EXECUTABLE}) else() message(FATAL_ERROR "Please install the Protocol Buffers compiler v${Protobuf_VERSION} in the host machine") endif() endif() if((NOT Protobuf_FOUND) OR (NOT Protobuf_PROTOC_EXECUTABLE) OR (${Protobuf_VERSION} VERSION_LESS ${GNSSSDR_PROTOBUF_MIN_VERSION})) unset(Protobuf_PROTOC_EXECUTABLE) if(CMAKE_CROSSCOMPILING) if(NOT Protobuf_FOUND) ExternalProject_Add(protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} PREFIX ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} GIT_REPOSITORY https://github.com/protocolbuffers/protobuf GIT_TAG v${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/protobuf/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} UPDATE_COMMAND ${GNSSSDR_BINARY_DIR}/thirdparty/protobuf/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/autogen.sh CONFIGURE_COMMAND "${GNSSSDR_BINARY_DIR}/thirdparty/protobuf/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/configure --prefix=${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} --host=$ENV{OECORE_TARGET_ARCH} --with-protoc=${PROTOC_EXECUTABLE}" BUILD_COMMAND ${CMAKE_MAKE_PROGRAM} INSTALL_COMMAND ${CMAKE_MAKE_PROGRAM} DESTDIR= install BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX} ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/bin/protoc ) set(PROTOBUF_PROTOC_EXECUTABLE "${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/bin/protoc") endif() else() if(CMAKE_VERSION VERSION_GREATER "3.13") if(absl_FOUND) if(absl_VERSION) if(${absl_VERSION} VERSION_LESS "20230117") unset(absl_FOUND CACHE) set(absl_FOUND OFF) endif() else() unset(absl_FOUND CACHE) set(absl_FOUND OFF) endif() endif() if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0.0")) unset(absl_FOUND CACHE) set(absl_FOUND OFF) endif() if(absl_FOUND) set_package_properties(absl PROPERTIES DESCRIPTION "An open-source collection of C++ code designed to augment the C++ standard library (found: v${absl_VERSION})" ) else() if(absl_VERSION) set_package_properties(absl PROPERTIES DESCRIPTION "An open-source collection of C++ code designed to augment the C++ standard library (found: v${absl_VERSION})" ) else() set_package_properties(absl PROPERTIES DESCRIPTION "An open-source collection of C++ code designed to augment the C++ standard library" ) endif() if(NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0.0")) message(STATUS "The Abseil library (https://github.com/abseil/abseil-cpp) >= v20230117 is required to be installed before building Protocol Buffers >22.x on the fly.") endif() message(STATUS " Instead, Protocol Buffers v21.12 will be built, which does not require Abseil.") set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "21.12") endif() endif() if(CMAKE_VERSION VERSION_LESS "3.13" OR NOT absl_FOUND) if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") if(NOT EXISTS "/usr/bin/libtoolize") message(" libtool has not been found.") message(" You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo yum groupinstall 'Development Tools'") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(" sudo zypper install libtoool") else() message(" sudo apt install libtool") endif() message(FATAL_ERROR "libtool is required to build Protocol Buffers from source") endif() if(EXISTS "/usr/bin/aclocal" OR EXISTS "/usr/bin/aclocal-1.16" OR EXISTS "/usr/bin/aclocal-1.15" OR EXISTS "/usr/bin/aclocal-1.14" OR EXISTS "/usr/bin/aclocal-1.13" OR EXISTS "/usr/bin/aclocal-1.11" OR EXISTS "/usr/bin/aclocal-1.10") message(STATUS "Automake found.") else() message(" aclocal has not been found.") message(" You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo yum groupinstall 'Development Tools'") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(" sudo zypper install automake") else() message(" sudo apt install automake") endif() message(FATAL_ERROR "aclocal is required to build Protocol Buffers from source") endif() endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") if((NOT EXISTS /usr/local/bin/glibtoolize AND NOT EXISTS ${MACOS_PACKAGES_PREFIX}/bin/glibtoolize) OR (NOT EXISTS /usr/local/bin/aclocal AND NOT EXISTS ${MACOS_PACKAGES_PREFIX}/bin/aclocal)) message(" libtool/automake tools have not been found.") message(" You can try to install them by typing:") message(" 'sudo port install libtool automake', if you use Macports, or 'brew install libtool automake', if you use Homebrew") message(FATAL_ERROR "libtool/automake tools are required to build Protocol Buffers from source") endif() if(CMAKE_GENERATOR STREQUAL Xcode) if(EXISTS ${MACOS_PACKAGES_PREFIX}/bin/glibtoolize OR EXISTS ${MACOS_PACKAGES_PREFIX}/bin/aclocal) if(NOT EXISTS /usr/local/bin/glibtoolize OR NOT EXISTS /usr/local/bin/aclocal) message(" WARNING: libtool/automake binaries cannot be found by Xcode. Please do:") message("sudo ln -s ${MACOS_PACKAGES_PREFIX}/bin/glibtoolize /usr/local/bin/") message("sudo ln -s ${MACOS_PACKAGES_PREFIX}/bin/aclocal /usr/local/bin/") message("sudo ln -s ${MACOS_PACKAGES_PREFIX}/bin/autom4te /usr/local/bin/") message("sudo ln -s ${MACOS_PACKAGES_PREFIX}/bin/automake /usr/local/bin/") message("sudo ln -s ${MACOS_PACKAGES_PREFIX}/bin/autoconf /usr/local/bin/") message("sudo ln -s ${MACOS_PACKAGES_PREFIX}/bin/autoreconf /usr/local/bin/") message(FATAL_ERROR "libtool/automake tools cannot be found by Xcode") endif() endif() endif() endif() set(PROTOBUF_MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}) if(PROTOBUF_MAKE_PROGRAM MATCHES "ninja" OR CMAKE_GENERATOR STREQUAL Xcode) find_program(MAKE_EXECUTABLE make PATHS /usr/bin /usr/local/bin ) if(NOT MAKE_EXECUTABLE) message(FATAL_ERROR "make is required to build Protocol Buffers from source.") endif() set(PROTOBUF_MAKE_PROGRAM ${MAKE_EXECUTABLE}) endif() if(CMAKE_VERSION VERSION_LESS 3.2) ExternalProject_Add(protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} PREFIX ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} GIT_REPOSITORY https://github.com/protocolbuffers/protobuf GIT_TAG v${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/protobuf/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} UPDATE_COMMAND ${GNSSSDR_BINARY_DIR}/thirdparty/protobuf/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/autogen.sh CONFIGURE_COMMAND ${GNSSSDR_BINARY_DIR}/thirdparty/protobuf/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/configure --prefix=${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} BUILD_COMMAND ${PROTOBUF_MAKE_PROGRAM} INSTALL_COMMAND ${PROTOBUF_MAKE_PROGRAM} DESTDIR= install ) else() if(CMAKE_MAKE_PROGRAM MATCHES "make") include(ProcessorCount) ProcessorCount(NUMBER_OF_PROCESSORS) if(NUMBER_OF_PROCESSORS GREATER 1) set(PROTOBUF_PARALLEL_BUILD "-j${NUMBER_OF_PROCESSORS}") endif() endif() ExternalProject_Add(protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} PREFIX ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} GIT_REPOSITORY https://github.com/protocolbuffers/protobuf GIT_TAG v${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/protobuf/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} UPDATE_COMMAND ${GNSSSDR_BINARY_DIR}/thirdparty/protobuf/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/autogen.sh CONFIGURE_COMMAND ${GNSSSDR_BINARY_DIR}/thirdparty/protobuf/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/configure --prefix=${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} BUILD_COMMAND ${PROTOBUF_MAKE_PROGRAM} ${PROTOBUF_PARALLEL_BUILD} INSTALL_COMMAND ${PROTOBUF_MAKE_PROGRAM} DESTDIR= install BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX} ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/bin/protoc ) endif() if(NOT TARGET protobuf::protoc) add_executable(protobuf::protoc IMPORTED) endif() add_dependencies(protobuf::protoc protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}) unset(Protobuf_PROTOC_EXECUTABLE) set(PROTOBUF_PROTOC_EXECUTABLE "${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/bin/protoc") set_target_properties(protobuf::protoc PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/bin/protoc" INTERFACE_LINK_LIBRARIES "${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}protoc${CMAKE_STATIC_LIBRARY_SUFFIX}" ) file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/include) if(NOT TARGET protobuf::libprotobuf) add_library(protobuf::libprotobuf STATIC IMPORTED) add_dependencies(protobuf::libprotobuf protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}) endif() set_target_properties(protobuf::libprotobuf PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX}" INTERFACE_INCLUDE_DIRECTORIES "${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/include" INTERFACE_LINK_LIBRARIES "${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX}" ) if(CMAKE_VERSION VERSION_LESS "3.10") set(Protobuf_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE}) endif() else() # CMake >= 3.13 and Abseil found include(BuildProtobuf) endif() endif() if(${Protobuf_VERSION} VERSION_LESS ${GNSSSDR_PROTOBUF_MIN_VERSION}) if(NOT (${Protobuf_VERSION} EQUAL "0.0.0")) set_package_properties(Protobuf PROPERTIES PURPOSE "Protocol Buffers found (v${Protobuf_VERSION}) is too old (> v${GNSSSDR_PROTOBUF_MIN_VERSION} needed)." ) endif() endif() set_package_properties(Protobuf PROPERTIES PURPOSE "Protocol Buffers v${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." ) endif() if(${Protobuf_VERSION} VERSION_EQUAL "0.0.0") unset(Protobuf_VERSION) endif() ################################################################################ # Doxygen - https://www.doxygen.nl (OPTIONAL, used if found) ################################################################################ if(CMAKE_VERSION VERSION_LESS 3.6.9) find_package(Doxygen) else() find_package(Doxygen OPTIONAL_COMPONENTS dot) endif() set_package_properties(Doxygen PROPERTIES URL "https://www.doxygen.nl" PURPOSE "Used to generate code documentation by doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} doc'" TYPE OPTIONAL ) if(DOXYGEN_FOUND AND DOXYGEN_VERSION) set_package_properties(Doxygen PROPERTIES DESCRIPTION "Generates documentation from annotated C++ sources (found: v${DOXYGEN_VERSION})" ) else() set_package_properties(Doxygen PROPERTIES DESCRIPTION "Generates documentation from annotated C++ sources" ) endif() if(CMAKE_VERSION VERSION_LESS 3.2.3) find_package(LATEX) else() find_package(LATEX COMPONENTS PDFLATEX) endif() set_package_properties(LATEX PROPERTIES URL "https://www.latex-project.org" DESCRIPTION "High-quality typesetting system" PURPOSE "Used to generate a PDF manual by doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} pdfmanual'." TYPE OPTIONAL ) if(DEFINED MATHJAX2_ROOT) set(ENABLE_EXTERNAL_MATHJAX OFF) endif() if(ENABLE_EXTERNAL_MATHJAX AND NOT DEFINED MATHJAX2_USE_ROOT) set(MATHJAX2_USE_ROOT "https://cdnjs.cloudflare.com/ajax/libs/mathjax/${GNSSSDR_MATHJAX_EXTERNAL_VERSION}") endif() unset(MATHJAX2_FOUND CACHE) find_package(MATHJAX2) set_package_properties(MATHJAX2 PROPERTIES URL "https://www.mathjax.org" DESCRIPTION "Beautiful and accessible math in all browsers" PURPOSE "Used to generate equations in HTML docs when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} doc'." TYPE OPTIONAL ) if(DOXYGEN_FOUND) message(STATUS "Doxygen found.") message(STATUS " You can build the documentation with '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} doc'.") message(STATUS " When done, point your browser to ${GNSSSDR_BINARY_DIR}/docs/html/index.html") if(CMAKE_VERSION VERSION_LESS 3.9.6) if(DOXYGEN_DOT_FOUND) set(HAVE_DOT "YES") endif() if(NOT TARGET Doxygen::doxygen) add_executable(Doxygen::doxygen IMPORTED GLOBAL) set_target_properties(Doxygen::doxygen PROPERTIES IMPORTED_LOCATION "${DOXYGEN_EXECUTABLE}" ) endif() else() if(TARGET Doxygen::dot) set(HAVE_DOT "YES") else() set(HAVE_DOT "NO") endif() endif() file(TO_NATIVE_PATH ${GNSSSDR_SOURCE_DIR} top_srcdir) file(TO_NATIVE_PATH ${GNSSSDR_BINARY_DIR} top_builddir) set(PDFMANUAL_MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}) if(PDFMANUAL_MAKE_PROGRAM MATCHES "ninja") find_program(PDFMANUAL_MAKE_EXECUTABLE make PATHS /usr/bin /usr/local/bin ) if(NOT PDFMANUAL_MAKE_EXECUTABLE) if(PDFLATEX_COMPILER) message(STATUS "Warning: make is required to build the PDF manual, so target pdfmanual will not be generated.") endif() set(PDFLATEX_COMPILER FALSE) endif() set(PDFMANUAL_MAKE_PROGRAM ${PDFMANUAL_MAKE_EXECUTABLE}) endif() if(PDFLATEX_COMPILER) set(GENERATE_PDF_DOCUMENTATION "YES") else() set(GENERATE_PDF_DOCUMENTATION "NO") endif() if(MATHJAX2_FOUND) set(GNSSSDR_USE_MATHJAX "YES") else() set(GNSSSDR_USE_MATHJAX "NO") endif() configure_file(${GNSSSDR_SOURCE_DIR}/docs/doxygen/Doxyfile.in ${GNSSSDR_BINARY_DIR}/docs/doxygen/Doxyfile @ONLY ) add_custom_target(doc Doxygen::doxygen ${GNSSSDR_BINARY_DIR}/docs/doxygen/Doxyfile WORKING_DIRECTORY ${GNSSSDR_BINARY_DIR} COMMENT "Generating HTML documentation from source code with Doxygen..." VERBATIM ) if(PDFLATEX_COMPILER) message(STATUS " '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} pdfmanual' will generate a manual at ${GNSSSDR_BINARY_DIR}/docs/GNSS-SDR_manual.pdf") add_custom_target(pdfmanual COMMAND ${PDFMANUAL_MAKE_PROGRAM} COMMAND ${CMAKE_COMMAND} -E copy refman.pdf ${GNSSSDR_BINARY_DIR}/docs/GNSS-SDR_manual.pdf COMMAND ${PDFMANUAL_MAKE_PROGRAM} clean DEPENDS doc WORKING_DIRECTORY ${GNSSSDR_BINARY_DIR}/docs/latex COMMENT "Generating PDF manual with LaTeX and pdflatex..." VERBATIM ) endif() message(STATUS " '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} doc-clean' will clean the documentation.") if(CMAKE_VERSION VERSION_LESS 3.17) add_custom_target(doc-clean COMMAND ${CMAKE_COMMAND} -E remove_directory ${GNSSSDR_BINARY_DIR}/docs/html COMMAND ${CMAKE_COMMAND} -E remove_directory ${GNSSSDR_BINARY_DIR}/docs/latex COMMAND ${CMAKE_COMMAND} -E remove ${GNSSSDR_BINARY_DIR}/docs/GNSS-SDR_manual.pdf COMMENT "Cleaning documentation." VERBATIM ) else() add_custom_target(doc-clean COMMAND ${CMAKE_COMMAND} -E rm -rf ${GNSSSDR_BINARY_DIR}/docs/html COMMAND ${CMAKE_COMMAND} -E rm -rf ${GNSSSDR_BINARY_DIR}/docs/latex COMMAND ${CMAKE_COMMAND} -E rm -f ${GNSSSDR_BINARY_DIR}/docs/GNSS-SDR_manual.pdf COMMENT "Cleaning documentation." VERBATIM ) endif() else() message(STATUS " Doxygen has not been found in your system.") message(STATUS " You can get nice code documentation by using it!") message(STATUS " Get it from https://www.doxygen.nl/download.html") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(STATUS " or simply by doing 'sudo yum install doxygen-latex'.") else() message(STATUS " or simply by doing 'sudo apt install doxygen-latex'.") endif() endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") message(STATUS " or simply by doing 'sudo port install doxygen +docs', if you are using Macports,") message(STATUS " or 'brew cask install mactex', then restart Terminal and do 'brew install graphviz doxygen', if you use Homebrew.") endif() set(ENABLE_EXTERNAL_MATHJAX OFF) endif() ################################################################################ # OpenCL (OPTIONAL) ################################################################################ find_package(OPENCL QUIET) set_package_properties(OPENCL PROPERTIES PURPOSE "Used in some processing block implementations." TYPE OPTIONAL ) if(NOT OPENCL_FOUND) set(ENABLE_OPENCL OFF) endif() if(ENABLE_OPENCL) if(DEFINED ENV{DISABLE_OPENCL}) set(DISABLE_OPENCL TRUE) endif() if(DISABLE_OPENCL) set(ENABLE_OPENCL OFF) else() if(OPENCL_FOUND) message(STATUS "OpenCL has been found and will be used by some processing blocks") message(STATUS " You can disable OpenCL use by doing 'cmake -DENABLE_OPENCL=OFF ..'") endif() endif() if(ENABLE_PACKAGING) set(ENABLE_OPENCL OFF) message(STATUS "ENABLE_PACKAGING is set to ON so the use of OpenCL has been disabled.") endif() if(NOT OPENCL_FOUND) message(STATUS "Processing blocks using OpenCL will not be built.") endif() endif() ################################################################################ # CUDA (OPTIONAL) ################################################################################ if(DEFINED ENV{CUDA_GPU_ACCEL}) message(STATUS "CUDA_GPU_ACCEL environment variable found.") set(ENABLE_CUDA ON) endif() if(ENABLE_CUDA) set(CMAKE_CUDA_STANDARD 14) set(CMAKE_CUDA_EXTENSIONS ON) if(CMAKE_VERSION VERSION_GREATER 3.11) include(CheckLanguage) check_language(CUDA) if(CMAKE_CUDA_COMPILER) enable_language(CUDA) set(CUDA_FOUND TRUE) else() set(ENABLE_CUDA OFF) endif() else() find_package(CUDA REQUIRED) set_package_properties(CUDA PROPERTIES URL "https://developer.nvidia.com/cuda-downloads" PURPOSE "Used in some processing block implementations." TYPE REQUIRED ) if(CUDA_FOUND) set_package_properties(CUDA PROPERTIES DESCRIPTION "Library for parallel programming in Nvidia GPUs (found: v${CUDA_VERSION_STRING})" ) set(CMAKE_CUDA_COMPILER_ID "NVIDIA") # only for reporting purposes set(CMAKE_CUDA_COMPILER_VERSION ${CUDA_VERSION_STRING}) # only for reporting purposes else() set_package_properties(CUDA PROPERTIES DESCRIPTION "Library for parallel programming in Nvidia GPUs" ) set(ENABLE_CUDA OFF) endif() endif() endif() if(ENABLE_CUDA) message(STATUS "NVIDIA CUDA GPU Acceleration will be enabled.") message(STATUS " You can disable it with 'cmake -DENABLE_CUDA=OFF ..'") else() message(STATUS "NVIDIA CUDA GPU Acceleration will be not enabled.") endif() ################################################################################ # CUSTOM UDP PACKET SOURCE (OPTIONAL) ################################################################################ find_package(PCAP) set_package_properties(PCAP PROPERTIES PURPOSE "Used for the custom UDP IP packet source." TYPE OPTIONAL ) if(PCAP_FOUND) set(ENABLE_RAW_UDP ON) endif() if(ENABLE_RAW_UDP) message(STATUS "Highly-optimized custom UDP IP packet source is enabled.") message(STATUS " You can disable it with 'cmake -DENABLE_RAW_UDP=OFF ..'") if(NOT PCAP_FOUND) message(FATAL_ERROR "PCAP required to compile custom UDP packet sample source (with ENABLE_RAW_UDP=ON)") endif() endif() ################################################################################ # FPGA (OPTIONAL) ################################################################################ if(ENABLE_FPGA) message(STATUS "FPGA offloading will be enabled.") message(STATUS " You can disable it with 'cmake -DENABLE_FPGA=OFF ..'") else() message(STATUS "FPGA offloading will be not enabled.") message(STATUS " Enable it with 'cmake -DENABLE_FPGA=ON ..' to add support for FPGA offloading.") endif() ################################################################################ # Setup of optional drivers ################################################################################ ########################################## # gr-osmosdr - OPTIONAL # https://github.com/osmocom/gr-osmosdr ########################################## if(DEFINED ENV{RTLSDR_DRIVER}) message(STATUS "RTLSDR_DRIVER environment variable found.") set(ENABLE_OSMOSDR ON) endif() find_package(GROSMOSDR) set_package_properties(GROSMOSDR PROPERTIES PURPOSE "Used for communication with OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based dongles, etc.)." TYPE OPTIONAL ) if(ENABLE_OSMOSDR) if(GROSMOSDR_FOUND) message(STATUS "The driver for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based dongles, etc.) will be compiled.") message(STATUS " You can disable it with 'cmake -DENABLE_OSMOSDR=OFF ..'") else() if(ENABLE_PACKAGING) message(WARNING "gr-osmosdr has not been found. Source blocks depending on it will NOT be built.") else() message(FATAL_ERROR "gr-osmosdr required to build gnss-sdr with the optional OSMOSDR driver") endif() set(ENABLE_OSMOSDR OFF) endif() else() message(STATUS "The (optional) driver for OsmoSDR and related front-ends is not enabled.") message(STATUS " Enable it with 'cmake -DENABLE_OSMOSDR=ON ..' to add support for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based USB dongles, etc.)") endif() ########################################## # gr-limesdr - OPTIONAL # https://github.com/myriadrf/gr-limesdr ########################################## find_package(GRLIMESDR) set_package_properties(GRLIMESDR PROPERTIES PURPOSE "Used for communication with LimeSDR." TYPE OPTIONAL ) if(ENABLE_LIMESDR) if(GRLIMESDR_FOUND) message(STATUS "The driver for LimeSDR will be compiled.") message(STATUS " You can disable it with 'cmake -DENABLE_LIMESDR=OFF ..'") else() if(ENABLE_PACKAGING) message(WARNING "gr-limesdr has not been found. Source blocks depending on it will NOT be built.") else() message(FATAL_ERROR "gr-limesdr required to build gnss-sdr with the optional LIMESDR driver") endif() set(ENABLE_LIMESDR OFF) endif() else() message(STATUS "The (optional) driver for LimeSDR is not enabled.") message(STATUS " Enable it with 'cmake -DENABLE_LIMESDR=ON ..' to add support for LimeSDR.") endif() ############################################## # gr-iio - OPTIONAL # IIO blocks for GNU Radio # https://github.com/analogdevicesinc/gr-iio ############################################## if(GNURADIO_IIO_FOUND) set(GRIIO_FOUND TRUE) set(GR_IIO_INCLUDE_HAS_GNURADIO TRUE) set(GNURADIO_API_IIO TRUE) else() # Force to always search for gr-iio unset(GRIIO_FOUND CACHE) unset(IIO_INCLUDE_DIRS CACHE) unset(IIO_LIBRARIES CACHE) find_package(GRIIO) set_package_properties(GRIIO PROPERTIES PURPOSE "Used for communication with PlutoSDR and FMCOMMS devices." TYPE OPTIONAL ) endif() find_package(LIBAD9361) set_package_properties(LIBAD9361 PROPERTIES PURPOSE "Used for configuring devices with the AD9361 chipset." TYPE OPTIONAL ) if(NOT LIBAD9361_FOUND) set(ENABLE_AD9361 OFF) set(ENABLE_AD936X_SDR OFF) set(ENABLE_FMCOMMS2 OFF) endif() if(ENABLE_PLUTOSDR OR ENABLE_FMCOMMS2) if(NOT GRIIO_FOUND) message(STATUS "gnuradio-iio not found, its installation is required.") message(STATUS "Please build and install the following projects:") message(STATUS " * libiio from https://github.com/analogdevicesinc/libiio") message(STATUS " * libad9361-iio from https://github.com/analogdevicesinc/libad9361-iio") message(STATUS " * gnuradio-iio from https://github.com/analogdevicesinc/gr-iio") if(ENABLE_PACKAGING) set(ENABLE_PLUTOSDR OFF) set(ENABLE_FMCOMMS2 OFF) else() message(FATAL_ERROR "gnuradio-iio is required for building gnss-sdr with -DENABLE_PLUTOSDR=ON or -DENABLE_FMCOMMS2=ON.") endif() endif() endif() ##################################################################### # libiio - OPTIONAL # A library for interfacing with local and remote Linux IIO devices # https://github.com/analogdevicesinc/libiio ##################################################################### find_package(LIBIIO) set_package_properties(LIBIIO PROPERTIES PURPOSE "Used for communication with the AD9361 chipset." TYPE OPTIONAL ) if(ENABLE_AD9361 OR ENABLE_FMCOMMS2 OR ENABLE_PLUTOSDR) if(NOT LIBIIO_FOUND) message(STATUS "libiio not found, its installation is required.") message(STATUS "Please build and install the following projects:") message(STATUS " * libiio from https://github.com/analogdevicesinc/libiio") message(STATUS " * libad9361-iio from https://github.com/analogdevicesinc/libad9361-iio") message(STATUS " * gnuradio-iio from https://github.com/analogdevicesinc/gr-iio") if(ENABLE_PACKAGING) set(ENABLE_AD9361 OFF) set(ENABLE_AD936X_SDR OFF) set(ENABLE_FMCOMMS2 OFF) else() message(FATAL_ERROR "libiio is required for building gnss-sdr with -DENABLE_AD9361=ON.") endif() else() if(ENABLE_AD9361) set(ENABLE_FPGA ON) endif() endif() endif() ################################################################################ # ION GNSS-SDR Metadata Standard https://sdr.ion.org/ (OPTIONAL) ################################################################################ if(CMAKE_VERSION VERSION_LESS 3.14) set(ENABLE_ION OFF) # FetchContent_MakeAvailable is available from CMake 3.14 endif() if(ENABLE_ION) include(FetchContent) set(CMAKE_POLICY_DEFAULT_CMP0063 NEW) FetchContent_Declare( gnss_metadata_standard GIT_REPOSITORY https://github.com/IonMetadataWorkingGroup/GNSS-Metadata-Standard GIT_TAG 220d116e10db5e403e21b77a1fa25aa35feda198 SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gnss-metadata-standard CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${GNSSSDR_BINARY_DIR}/gnss-metadata-standard BINARY_DIR ${GNSSSDR_BINARY_DIR}/gnss-metadata-standard ) FetchContent_MakeAvailable(gnss_metadata_standard) if(NOT TARGET ION::ion) add_library(ION::ion STATIC IMPORTED) add_dependencies(ION::ion gnss_metadata_standard) if(CMAKE_GENERATOR STREQUAL "Xcode") set_target_properties(ION::ion PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION_DEBUG "${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX}" IMPORTED_LOCATION_RELEASE "${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/Release/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX}" IMPORTED_LOCATION_RELWITHDEBINFO "${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX}" IMPORTED_LOCATION_MINSIZEREL "${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/MinSizeRel/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX}" INTERFACE_INCLUDE_DIRECTORIES "${GNSSSDR_BINARY_DIR}/thirdparty/gnss-metadata-standard/source/api/inc" ) set_property(TARGET ION::ion APPEND PROPERTY INTERFACE_LINK_LIBRARIES "$<$:${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX};${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/tinyxml2/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}xml${CMAKE_STATIC_LIBRARY_SUFFIX}>" "$<$:${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/Release/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX};${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/tinyxml2/Release/${CMAKE_FIND_LIBRARY_PREFIXES}xml${CMAKE_STATIC_LIBRARY_SUFFIX}>" "$<$:${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX};${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/tinyxml2/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}xml${CMAKE_STATIC_LIBRARY_SUFFIX}>" "$<$:${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/MinSizeRel/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX};${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/tinyxml2/MinSizeRel/${CMAKE_FIND_LIBRARY_PREFIXES}xml${CMAKE_STATIC_LIBRARY_SUFFIX}>" "$<$:${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX};${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/tinyxml2/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}xml${CMAKE_STATIC_LIBRARY_SUFFIX}>" "$<$:${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX};${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/tinyxml2/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}xml${CMAKE_STATIC_LIBRARY_SUFFIX}>" "$<$:${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX};${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/tinyxml2/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}xml${CMAKE_STATIC_LIBRARY_SUFFIX}>" "$<$:${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX};${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/tinyxml2/RelWithDebInfo/${CMAKE_FIND_LIBRARY_PREFIXES}xml${CMAKE_STATIC_LIBRARY_SUFFIX}>" "$<$:${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX};${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/tinyxml2/Debug/${CMAKE_FIND_LIBRARY_PREFIXES}xml${CMAKE_STATIC_LIBRARY_SUFFIX}>" ) else() set_target_properties(ION::ion PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX}" INTERFACE_INCLUDE_DIRECTORIES "${GNSSSDR_BINARY_DIR}/thirdparty/gnss-metadata-standard/source/api/inc" INTERFACE_LINK_LIBRARIES "${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/GnssMetadata/${CMAKE_FIND_LIBRARY_PREFIXES}api${CMAKE_STATIC_LIBRARY_SUFFIX};${GNSSSDR_BINARY_DIR}/gnss-metadata-standard/source/api/lib/tinyxml2/${CMAKE_FIND_LIBRARY_PREFIXES}xml${CMAKE_STATIC_LIBRARY_SUFFIX}" ) endif() endif() endif() ##################################################################### # Check signal sources related to FPGA only. ##################################################################### if(ENABLE_MAX2771 AND NOT ENABLE_FPGA) message(STATUS "The SPIdev driver is enabled, but the FPGA is not enabled. The FPGA is required when using the SPIdev driver.") if(ENABLE_PACKAGING) set(ENABLE_MAX2771 OFF) else() message(FATAL_ERROR "ENABLE_MAX2771 can only be set when ENABLE_FPGA is also set.") endif() endif() if(ENABLE_DMA_PROXY AND NOT ENABLE_FPGA) message(STATUS "The DMA Proxy driver is enabled, but the FPGA is not enabled. The FPGA is required when using the DMA Proxy driver.") if(ENABLE_PACKAGING) set(ENABLE_DMA_PROXY OFF) else() message(FATAL_ERROR "ENABLE_DMA_PROXY can only be set when ENABLE_FPGA is also set.") endif() endif() ##################################################################### # spidev driver - OPTIONAL # Linux kernel driver that provides user-space access to Serial # Peripheral Interface) ##################################################################### if(ENABLE_MAX2771) if(DEFINED ENV{SDKTARGETSYSROOT}) set(TARGET_ROOTFS_PATH $ENV{SDKTARGETSYSROOT}) else() string(REGEX MATCH "(.*/tmp-glibc)" MATCHED_PATH "${GNURADIO_RUNTIME_INCLUDE_DIRS}") if(MATCHED_PATH) set(TARGET_ROOTFS_PATH "${MATCHED_PATH}/sysroots-components") else() set(TARGET_ROOTFS_PATH "") endif() endif() file(GLOB_RECURSE SPIDEV_FILE "${TARGET_ROOTFS_PATH}/*/spidev.h") if(EXISTS "${SPIDEV_FILE}") message(STATUS "SPIdev driver found: ${SPIDEV_FILE}") set(ENABLE_FPGA ON) else() message(STATUS "SPIdev driver not found, its installation is required.") if(ENABLE_PACKAGING) set(ENABLE_MAX2771 OFF) else() message(FATAL_ERROR "SPIdev driver is required for building gnss-sdr with -DENABLE_MAX2271=ON.") endif() endif() endif() ##################################################################### # DMA Proxy driver - OPTIONAL # Simplified and efficient interface for user-space applications # to leverage DMA capabilities for Xilinx FPGA and SoC systems ##################################################################### if(ENABLE_DMA_PROXY) if(DEFINED ENV{SDKTARGETSYSROOT}) set(TARGET_ROOTFS_PATH $ENV{SDKTARGETSYSROOT}) else() string(REGEX MATCH "(.*/tmp-glibc)" MATCHED_PATH "${GNURADIO_RUNTIME_INCLUDE_DIRS}") if(MATCHED_PATH) set(TARGET_ROOTFS_PATH "${MATCHED_PATH}/sysroots-components") else() set(TARGET_ROOTFS_PATH "") endif() endif() file(GLOB_RECURSE DMA_PROXY_FILE "${TARGET_ROOTFS_PATH}/*/dma-proxy.ko") if(EXISTS "${DMA_PROXY_FILE}") message(STATUS "Found dma-proxy.ko file: ${DMA_PROXY_FILE}") set(ENABLE_FPGA ON) else() if(ENABLE_PACKAGING) set(ENABLE_DMA_PROXY OFF) else() message(FATAL_ERROR "DMA Proxy driver is required for building gnss-sdr with -DENABLE_DMA_PROXY=ON.") endif() endif() endif() ############################################## # TELEORBIT FLEXIBAND FRONTEND - OPTIONAL ############################################## if(DEFINED ENV{FLEXIBAND_DRIVER}) message(STATUS "FLEXIBAND_DRIVER environment variable found.") set(ENABLE_FLEXIBAND ON) endif() if(FLEXIBAND_DRIVER) set(ENABLE_FLEXIBAND ON) endif() if(ENABLE_FLEXIBAND) message(STATUS "The Teleorbit Flexiband front-end source will be compiled.") message(STATUS " You can disable it with 'cmake -DENABLE_FLEXIBAND=OFF ..'") else() message(STATUS "The (optional) Teleorbit Flexiband front-end driver adapter is not enabled.") message(STATUS " Enable it with 'cmake -DENABLE_FLEXIBAND=ON ..' to add support for the Teleorbit Flexiband front-end.") endif() find_package(TELEORBIT) set_package_properties(TELEORBIT PROPERTIES PURPOSE "Used for communication with the Flexiband front-end." TYPE OPTIONAL ) if(ENABLE_FLEXIBAND) if(NOT TELEORBIT_FOUND) message(FATAL_ERROR "Teleorbit Flexiband GNU Radio driver required to build gnss-sdr with the optional FLEXIBAND adapter") endif() endif() ####################################################### # CTTC's digital array beamformer prototype - OPTIONAL ####################################################### if(DEFINED ENV{RAW_ARRAY_DRIVER}) message(STATUS "RAW_ARRAY_DRIVER environment variable found.") set(ENABLE_ARRAY ON) endif() if(RAW_ARRAY_DRIVER) set(ENABLE_ARRAY ON) endif() find_package(GRDBFCTTC QUIET) set_package_properties(GRDBFCTTC PROPERTIES URL "https://github.com/gnss-sdr/gr-dbfcttcs" DESCRIPTION "CTTC's array prototype GNU Radio block." PURPOSE "Used for communication with CTTC's antenna array." TYPE OPTIONAL ) if(ENABLE_ARRAY) message(STATUS "CTTC's Antenna Array front-end driver will be compiled.") message(STATUS " You can disable it with 'cmake -DENABLE_ARRAY=OFF ..'") else() message(STATUS "The (optional) CTTC's Antenna Array front-end driver is not enabled.") message(STATUS " Enable it with 'cmake -DENABLE_ARRAY=ON ..' to add support for the CTTC experimental array front-end.") endif() ################################################################################ # GPerftools - https://github.com/gperftools/gperftools - OPTIONAL) ################################################################################ find_package(GPERFTOOLS) set_package_properties(GPERFTOOLS PROPERTIES PURPOSE "Used for performance analysis." TYPE OPTIONAL ) if(ENABLE_GPERFTOOLS) if(NOT GPERFTOOLS_FOUND) message(STATUS "Although ENABLE_GPERFTOOLS has been set to ON, GPerftools has not been found.") message(STATUS " Binaries will be compiled without 'tcmalloc' and 'profiler' libraries.") message(STATUS " You can install GPerftools from https://github.com/gperftools/gperftools") else() message(STATUS "GPerftools libraries found.") message(STATUS " Binaries will be compiled with 'tcmalloc' and 'profiler' libraries.") endif() # Set GPerftools related flags if it is available # See https://github.com/gperftools/gperftools/blob/master/README if(GPERFTOOLS_FOUND) if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) add_compile_options(-fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free) endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-fno-builtin) endif() endif() endif() ################################################################################ # GNU gprof (OPTIONAL) - https://sourceware.org/binutils/docs/gprof/ ################################################################################ if(ENABLE_GPROF) add_compile_options(-pg) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg") endif() ################################################################################ # Set compiler flags ################################################################################ set(CXX_WARNING_FLAGS -Wall -Wextra) if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) # Add warning flags # For "-Wall" see https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html if(NOT (CMAKE_VERSION VERSION_LESS "3.3")) add_compile_options("$<$:${CXX_WARNING_FLAGS}>") else() add_compile_options("$<$,CXX>:${CXX_WARNING_FLAGS}>") endif() if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0") add_compile_options(-Wno-missing-field-initializers) endif() if(CMAKE_CROSSCOMPILING OR NOT ENABLE_PACKAGING) if(NOT ENABLE_CUDA) add_compile_options(-Wno-psabi) endif() endif() if(IS_ARM) if((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "7.1.0") AND (CMAKE_VERSION VERSION_GREATER "3.1")) if(CMAKE_CXX_STANDARD VERSION_LESS 17) set(CXX_ALIGN_FLAG -faligned-new) if(NOT (CMAKE_VERSION VERSION_LESS "3.3")) add_compile_options("$<$:${CXX_ALIGN_FLAG}>") else() add_compile_options("$<$,CXX>:${CXX_ALIGN_FLAG}>") endif() endif() endif() endif() endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(NOT (CMAKE_VERSION VERSION_LESS "3.3")) add_compile_options("$<$:${CXX_WARNING_FLAGS}>") else() add_compile_options("$<$,CXX>:${CXX_WARNING_FLAGS}>") endif() endif() ################################################################################ # clang-tidy https://clang.llvm.org/extra/clang-tidy/index.html ################################################################################ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(NOT (CMAKE_VERSION VERSION_LESS "3.6")) find_program( CLANG_TIDY_EXE NAMES "clang-tidy" DOC "Path to clang-tidy executable" ) if(NOT CLANG_TIDY_EXE) message(STATUS "clang-tidy not found.") else() message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}") if(ENABLE_CLANG_TIDY) message(STATUS " clang-tidy will be used in compilation. You can disable it with 'cmake -DENABLE_CLANG_TIDY=OFF ..'") else() message(STATUS " You can enable clang-tidy usage in compilation with 'cmake -DENABLE_CLANG_TIDY=ON ..'") endif() set(DO_CLANG_TIDY "${CLANG_TIDY_EXE}" "-fix") set(CMAKE_EXPORT_COMPILE_COMMANDS ON) endif() endif() endif() ################################################################################ # Create uninstall target ################################################################################ configure_file( ${GNSSSDR_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in ${GNSSSDR_BINARY_DIR}/cmake_uninstall.cmake @ONLY ) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${GNSSSDR_BINARY_DIR}/cmake_uninstall.cmake ) ################################################################################ # Add subdirectories ################################################################################ add_subdirectory(src) if(ENABLE_UNIT_TESTING OR ENABLE_SYSTEM_TESTING) add_subdirectory(tests) endif() add_subdirectory(utils) ################################################################################ # Print summary ################################################################################ add_feature_info(ENABLE_UHD ENABLE_UHD "Enables UHD_Signal_Source for using RF front-ends from the USRP family. Requires gr-uhd.") add_feature_info(ENABLE_OSMOSDR ENABLE_OSMOSDR "Enables Osmosdr_Signal_Source and RtlTcp_Signal_Source for using RF front-ends compatible with the OsmoSDR driver. Requires gr-osmosdr.") add_feature_info(ENABLE_LIMESDR ENABLE_LIMESDR "Enables Limesdr_Signal_Source. Requires gr-limesdr.") add_feature_info(ENABLE_FMCOMMS2 ENABLE_FMCOMMS2 "Enables Fmcomms2_Signal_Source for FMCOMMS2/3/4 devices. Requires libiio, libad9361-dev, and gr-iio.") add_feature_info(ENABLE_PLUTOSDR ENABLE_PLUTOSDR "Enables Plutosdr_Signal_Source and Ad936x_Custom_Signal_Source for using ADALM-PLUTO boards. Requires libiio, libad9361-dev, and gr-iio.") add_feature_info(ENABLE_AD936X_SDR ENABLE_AD936X_SDR "Enables Ad936x_Custom_Signal_Source for using ADALM-PLUTO boards with custom firmware. Requires libiio and libad9361-dev.") add_feature_info(ENABLE_FPGA ENABLE_FPGA "Enables building of processing blocks for FPGA offloading.") add_feature_info(ENABLE_AD9361 ENABLE_AD9361 "Enables ADRV9361_Z7035_Signal_Source_FPGA and the FMCOMMS5_Signal_Source_FPGA for FPGA SoC devices with the AD9361 chipset. Requires libiio, libad9361-dev, and -DENABLE_FPGA=ON.") add_feature_info(ENABLE_MAX2771 ENABLE_MAX2771 "Enables FPGA_MAX2771_EVKIT_Signal_Source for FPGA SoC devices with the with the MAX2771 chipset. Requires the spidev driver and -DENABLE_FPGA=ON.") add_feature_info(ENABLE_DMA_PROXY ENABLE_DMA_PROXY "Enables DMA_Signal_Source_FPGA for file post-processing in FPGA SoC devices. Requires the DMA Proxy driver and -DENABLE_FPGA=ON.") add_feature_info(ENABLE_RAW_UDP ENABLE_RAW_UDP "Enables Custom_UDP_Signal_Source for custom UDP packet sample source. Requires libpcap.") add_feature_info(ENABLE_FLEXIBAND ENABLE_FLEXIBAND "Enables Flexiband_Signal_Source for using Teleorbit's Flexiband RF front-end. Requires gr-teleorbit.") add_feature_info(ENABLE_ARRAY ENABLE_ARRAY "Enables Raw_Array_Signal_Source and Array_Signal_Conditioner for using CTTC's antenna array. Requires gr-dbfcttc.") add_feature_info(ENABLE_ZMQ ENABLE_ZMQ "Enables ZMQ_Signal_Source for GNU Radio ZeroMQ messages. Requires gr-zeromq.") add_feature_info(ENABLE_ION ENABLE_ION "Enables ION_GSMS_Signal_Source for the ION Metadata Standard.") add_feature_info(ENABLE_GPERFTOOLS ENABLE_GPERFTOOLS "Enables performance analysis. Requires Gperftools.") add_feature_info(ENABLE_GPROF ENABLE_GPROF "Enables performance analysis with 'gprof'.") add_feature_info(ENABLE_CLANG_TIDY ENABLE_CLANG_TIDY "Runs clang-tidy along with the compiler. Requires Clang.") add_feature_info(ENABLE_PROFILING ENABLE_PROFILING "Runs volk_gnsssdr_profile at the end of the building.") add_feature_info(ENABLE_OPENCL ENABLE_OPENCL "Enables GPS_L1_CA_PCPS_OpenCl_Acquisition (experimental). Requires OpenCL.") add_feature_info(ENABLE_CUDA ENABLE_CUDA "Enables GPS_L1_CA_DLL_PLL_Tracking_GPU (experimental). Requires CUDA.") add_feature_info(ENABLE_ARMA_NO_DEBUG ENABLE_ARMA_NO_DEBUG "Enables passing the ARMA_NO_DEBUG macro to Armadillo, hence disabling bound checking.") add_feature_info(ENABLE_PACKAGING ENABLE_PACKAGING "Enables software packaging.") add_feature_info(ENABLE_OWN_GLOG ENABLE_OWN_GLOG "Forces the downloading and building of Google glog.") add_feature_info(ENABLE_GLOG_AND_GFLAGS ENABLE_GLOG_AND_GFLAGS "Forces the usage of Google glog and Gflags instead of Abseil.") add_feature_info(ENABLE_OWN_ABSEIL ENABLE_OWN_ABSEIL "Forces downloading and building Abseil. Supersedes ENABLE_OWN_GLOG.") add_feature_info(ENABLE_OWN_ARMADILLO ENABLE_OWN_ARMADILLO "Forces the downloading and building of Armadillo.") add_feature_info(ENABLE_GNUTLS ENABLE_GNUTLS "Forces linking against GnuTLS instead of OpenSSL.") add_feature_info(ENABLE_LOG ENABLE_LOG "Enables runtime internal logging.") add_feature_info(ENABLE_ORC ENABLE_ORC "Use the Optimized Inner Loop Runtime Compiler (ORC) for building volk_gnsssdr.") add_feature_info(ENABLE_STRIP ENABLE_STRIP "Enables the generation of stripped binaries (without debugging symbols).") add_feature_info(ENABLE_UNIT_TESTING ENABLE_UNIT_TESTING "Enables building of Unit Tests.") add_feature_info(ENABLE_UNIT_TESTING_MINIMAL ENABLE_UNIT_TESTING_MINIMAL "Enables building a minimal set of Unit Tests.") add_feature_info(ENABLE_UNIT_TESTING_EXTRA ENABLE_UNIT_TESTING_EXTRA "Enables building of Extra Unit Tests and downloading of external data files.") add_feature_info(ENABLE_SYSTEM_TESTING ENABLE_SYSTEM_TESTING "Enables building of System Tests.") add_feature_info(ENABLE_SYSTEM_TESTING_EXTRA ENABLE_SYSTEM_TESTING_EXTRA "Enables building of Extra System Tests and downloading of external tools.") add_feature_info(ENABLE_OWN_GNSSTK ENABLE_OWN_GNSSTK "Forces the downloading and building of gnsstk for system tests.") add_feature_info(ENABLE_GNSS_SIM_INSTALL ENABLE_GNSS_SIM_INSTALL "Enables downloading and building of gnss-sim.") add_feature_info(ENABLE_INSTALL_TESTS ENABLE_INSTALL_TESTS "Install test binaries when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} install'.") add_feature_info(ENABLE_BENCHMARKS ENABLE_BENCHMARKS "Enables building of code snippet benchmarks.") add_feature_info(ENABLE_EXTERNAL_MATHJAX ENABLE_EXTERNAL_MATHJAX "Use MathJax from an external CDN in HTML docs when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} doc'.") add_feature_info(ENABLE_CPUFEATURES ENABLE_CPUFEATURES "Make use of the cpu_features library.") add_feature_info(Boost_USE_STATIC_LIBS Boost_USE_STATIC_LIBS "Use Boost static libraries.") message(STATUS "") message(STATUS "***************************************") message(STATUS "* SUMMARY REPORT *") message(STATUS "***************************************") message(STATUS "") if(CMAKE_CROSSCOMPILING) message(STATUS "Cross-compiling on ${LINUX_DISTRIBUTION} ${LINUX_VER} (${CMAKE_HOST_SYSTEM_PROCESSOR}) for ${CMAKE_SYSTEM_PROCESSOR}") else() if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") message(STATUS "Building on GNU/Linux ${LINUX_DISTRIBUTION} ${LINUX_VER} ${ARCHITECTURE_STRING}") endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") message(STATUS "Building on ${MACOS_DISTRIBUTION}") if(${DETECT_MACPORTS} EQUAL 0) message(STATUS "Found Macports v${MACPORTS_VERSION} installed at ${MACPORTS_PREFIX}") endif() if(${DETECT_HOMEBREW} EQUAL 0) message(STATUS "Found Homebrew v${HOMEBREW_VERSION} installed at ${HOMEBREW_PREFIX}") endif() endif() endif() message(STATUS "CMake version: ${CMAKE_VERSION}") message(STATUS "The CXX compiler identification is ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}. Standard: C++${CMAKE_CXX_STANDARD}.") message(STATUS "The C compiler identification is ${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}. Standard: C${CMAKE_C_STANDARD}.") if(CUDA_FOUND) message(STATUS "The CUDA compiler identification is ${CMAKE_CUDA_COMPILER_ID} ${CMAKE_CUDA_COMPILER_VERSION}. Standard: C++${CMAKE_CUDA_STANDARD}.") endif() message(STATUS "") file(REMOVE ${GNSSSDR_BINARY_DIR}/features.log) file(WRITE ${GNSSSDR_BINARY_DIR}/features.log "**********************************\n") file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "* BUILDING CONFIGURATION SUMMARY *\n") file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "**********************************\n\n") file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "GNSS-SDR version: ${VERSION}\n") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") if(CMAKE_CROSSCOMPILING) file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "Cross-compiling on ${LINUX_DISTRIBUTION} ${LINUX_VER} (${CMAKE_HOST_SYSTEM_PROCESSOR}) for ${CMAKE_SYSTEM_PROCESSOR}\n") else() file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "Building on GNU/Linux ${LINUX_DISTRIBUTION} ${LINUX_VER} ${ARCHITECTURE_STRING}\n") endif() endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "Building on ${MACOS_DISTRIBUTION}\n") endif() file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "CMake version: ${CMAKE_VERSION}\n") file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "The CXX compiler identification is ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}. Standard: C++${CMAKE_CXX_STANDARD}.\n") file(APPEND ${GNSSSDR_BINARY_DIR}/features.log "The C compiler identification is ${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}. Standard: C${CMAKE_C_STANDARD}.\n\n") if(CMAKE_VERSION VERSION_LESS 3.4) feature_summary(WHAT ALL) feature_summary(FILENAME ${GNSSSDR_BINARY_DIR}/features.log APPEND WHAT ALL) else() feature_summary(WHAT REQUIRED_PACKAGES_FOUND REQUIRED_PACKAGES_NOT_FOUND OPTIONAL_PACKAGES_FOUND OPTIONAL_PACKAGES_NOT_FOUND ENABLED_FEATURES DISABLED_FEATURES ) feature_summary(FILENAME ${GNSSSDR_BINARY_DIR}/features.log APPEND WHAT REQUIRED_PACKAGES_FOUND REQUIRED_PACKAGES_NOT_FOUND OPTIONAL_PACKAGES_FOUND OPTIONAL_PACKAGES_NOT_FOUND ENABLED_FEATURES DISABLED_FEATURES ) endif() message(STATUS "GNSS-SDR v${VERSION} is ready to be built.") gnss-sdr-0.0.20/CODE_OF_CONDUCT.md000066400000000000000000000131101477325711200161350ustar00rootroot00000000000000 [comment]: # ( SPDX-License-Identifier: CC-BY-4.0 ) [comment]: # ( SPDX-FileCopyrightText: 2017-2020 Carles Fernandez-Prades ) # Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: - Demonstrating empathy and kindness toward other people - Being respectful of differing opinions, viewpoints, and experiences - Giving and gracefully accepting constructive feedback - Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience - Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: - The use of sexualized language or imagery, and sexual attention or advances of any kind - Trolling, insulting or derogatory comments, and personal or political attacks - Public or private harassment - Publishing others' private information, such as a physical or email address, without their explicit permission - Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at carles.fernandez@cttc.es All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][mozilla coc]. For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][faq]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. [homepage]: https://www.contributor-covenant.org [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html [mozilla coc]: https://github.com/mozilla/diversity [faq]: https://www.contributor-covenant.org/faq [translations]: https://www.contributor-covenant.org/translations gnss-sdr-0.0.20/CONTRIBUTING.md000066400000000000000000000203621477325711200155760ustar00rootroot00000000000000# Contributing to GNSS-SDR [comment]: # ( SPDX-License-Identifier: GPL-3.0-or-later ) [comment]: # ( SPDX-FileCopyrightText: 2011-2021 Carles Fernandez-Prades ) :+1::tada: Thanks for taking the time to contribute! :tada::+1: Third-party contributions are essential for keeping GNSS-SDR continuously improving. We simply cannot access the huge number of platforms and myriad configurations for running GNSS-SDR. We want to keep it as easy as possible to contribute changes that get things working in your environment. There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things. The following is a set of guidelines for contributing to GNSS-SDR, which is hosted in the [GNSS-SDR Organization](https://github.com/gnss-sdr) on GitHub. These are just guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a [pull request](#how-to-submit-a-pull-request). ## Code of Conduct This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior. ## Reporting an issue Have you found a bug in the code which is not in the [list of known bugs](https://github.com/gnss-sdr/gnss-sdr/issues)? Do you have a suggestion for improvement? Then by all means please [submit a new issue](https://github.com/gnss-sdr/gnss-sdr/issues/new), and do not hesitate to comment on existing [open issues](https://github.com/gnss-sdr/gnss-sdr/issues). When filling a new issue, please remember to: - **Use a clear and descriptive title** for the issue to identify the problem. - **Describe the exact steps which reproduce the problem** in as many details as possible. For example, start by describing your computing platform (Operating System and version, how did you installed GNSS-SDR and its dependencies, what file or front-end are you using as a signal source, etc.). You can also include the configuration file you are using, or a dump of the terminal output you are getting. The more information you provide, the more chances to get useful answers. - **Please be patient**. This organization is run on a volunteer basis, so it can take some time to the Developer Team to reach your issue. They will do their best to fix it as soon as possible. - If you opened an issue that is now solved, it is a good practice to **close it**. The list of [open issues](https://github.com/gnss-sdr/gnss-sdr/issues) can be a good starting point and a source of ideas if you are looking to contribute to the source code. ## Contributing to the source code ### Preliminaries 1. If you still have not done so, [create your personal account on GitHub](https://github.com/join). 2. [Fork GNSS-SDR from GitHub](https://github.com/gnss-sdr/gnss-sdr/fork). This will copy the whole gnss-sdr repository to your personal account. 3. Then, go to your favorite working folder in your computer and clone your forked repository by typing (replacing `YOUR_USERNAME` by the actual username of your GitHub account): $ git clone https://github.com/YOUR_USERNAME/gnss-sdr 4. Your forked repository https://github.com/YOUR_USERNAME/gnss-sdr will receive the default name of `origin`. You can also add the original gnss-sdr repository, which is usually referred to as `upstream`: $ cd gnss-sdr $ git remote add upstream https://github.com/gnss-sdr/gnss-sdr.git To verify the new upstream repository you have specified for your fork, type `git remote -v`. You should see the URL for your fork as `origin`, and the URL for the original repository as `upstream`: ``` $ git remote -v origin https://github.com/YOUR_USERNAME/gnss-sdr.git (fetch) origin https://github.com/YOUR_USERNAME/gnss-sdr.git (push) upstream https://github.com/gnss-sdr/gnss-sdr.git (fetch) upstream https://github.com/gnss-sdr/gnss-sdr.git (push) ``` ### Start working on your contribution Checkout the `next` branch of the git repository in order to get synchronized with the latest development code: ``` $ git checkout next $ git pull upstream next ``` When start working in a new improvement, please **always** branch off from `next`. Open a new branch and start working on it: ``` $ git checkout -b my_feature ``` Now you can do changes, add files, do commits (please take a look at [how to write good commit messages](https://chris.beams.io/posts/git-commit/), and do not forget to [sign your commits](https://gnss-sdr.org/docs/tutorials/using-git/#sign-your-commits) if you plan to submit your code to the upstream repository in a pull-request, see below) and push them to your repository: ``` $ git push origin my_feature ``` If there have been new pushes to the `next` branch of the `upstream` repository since the last time you pulled from it, you might want to put your commits on top of them (this is mandatory for pull requests): ``` $ git pull --rebase upstream next ``` ### How to submit a pull request Any code contributions going into GNSS-SDR will become part of a GPL-licensed, open source repository. It is therefore imperative that code submissions belong to the authors, and that submitters have the authority to merge that code into the public GNSS-SDR codebase. For that purpose, we use the [Developer's Certificate of Origin](https://github.com/gnss-sdr/gnss-sdr/blob/next/.github/DCO.txt). It is the same document used by other projects. Signing the DCO states that there are no legal reasons to not merge your code. To sign the DCO, suffix your git commits with a `Signed-off-by:` line. When using the command line, you can use `git commit -s` to automatically add this line. If there were multiple authors of the code, or other types of stakeholders, make sure that all are listed, each with a separate `Signed-off-by:` line. See [how to sign commits](https://gnss-sdr.org/docs/tutorials/using-git/#sign-your-commits) for details on how to tell Git to sign commits by default. Before submitting your code, please be sure to [apply clang-format](https://gnss-sdr.org/coding-style/#use-tools-for-automated-code-formatting). When the contribution is ready, you can [submit a pull request](https://github.com/gnss-sdr/gnss-sdr/compare/). Head to your GitHub repository, switch to your `my_feature` branch, and click the _**Pull Request**_ button, which will do all the work for you. Code comparison must be always to the `next` branch. Once a pull request is sent, the Developer Team can review the set of changes, discuss potential modifications, and even push follow-up commits if necessary. Some things that will increase the chance that your pull request is accepted: - Your commits must be signed. - Avoid platform-dependent code. If your code require external dependencies, they must be available as packages in [Debian OldStable](https://wiki.debian.org/DebianOldStable). - Write tests. - Follow our [coding style guide](https://gnss-sdr.org/coding-style/). Specifically, please make sure that you have applied [clang-format](https://clang.llvm.org/docs/ClangFormat.html) and [clang-tidy](https://clang.llvm.org/extra/clang-tidy/) to your changes before you do your pull request. Please check the [final recommendations](https://gnss-sdr.org/coding-style/#final-recommendations) for guidelines on how to apply those tools. - Write a descriptive and detailed summary. Please consider that reviewing pull requests is hard, so include as much information as possible to make your pull request's intent clear. For more details about Git usage, please check out [our tutorial](https://gnss-sdr.org/docs/tutorials/using-git/). ## Contributing to the website The content of https://gnss-sdr.org lives in a GitHub repository at https://github.com/gnss-sdr/geniuss-place You can fork that repository, reproduce the entire website on your computer using [Jekyll](https://jekyllrb.com/), do changes and submit pull requests, just as explained above. For more details, please check out [how to contribute](https://gnss-sdr.org/contribute/). Last but not the least, you can leave your comments on the website. --- ![GeNiuSS contributes](https://gnss-sdr.org/assets/images/geniuss-contribute.png) Thanks for your contribution to GNSS-SDR! gnss-sdr-0.0.20/COPYING000066400000000000000000001057611477325711200144070ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gnss-sdr-0.0.20/LICENSES/000077500000000000000000000000001477325711200145475ustar00rootroot00000000000000gnss-sdr-0.0.20/LICENSES/Apache-2.0.txt000066400000000000000000000241471477325711200167760ustar00rootroot00000000000000Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. gnss-sdr-0.0.20/LICENSES/BSD-1-Clause.txt000066400000000000000000000020521477325711200172670ustar00rootroot00000000000000Copyright (c) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. THIS SOFTWARE IS PROVIDED BY Berkeley Software Design, Inc. "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design, Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. gnss-sdr-0.0.20/LICENSES/BSD-2-Clause.txt000066400000000000000000000024101477325711200172660ustar00rootroot00000000000000Copyright (c) . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. gnss-sdr-0.0.20/LICENSES/BSD-3-Clause.txt000066400000000000000000000027101477325711200172720ustar00rootroot00000000000000Copyright (c) . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. gnss-sdr-0.0.20/LICENSES/CC-BY-4.0.txt000066400000000000000000000406561477325711200164170ustar00rootroot00000000000000Creative Commons Attribution 4.0 International Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors : wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public : wiki.creativecommons.org/Considerations_for_licensees Creative Commons Attribution 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 – Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 – Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: A. reproduce and Share the Licensed Material, in whole or in part; and B. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. 5. Downstream recipients. A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 – License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: A. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. Section 4 – Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 – Disclaimer of Warranties and Limitation of Liability. a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 – Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 – Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 – Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the "Licensor." The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication. Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. gnss-sdr-0.0.20/LICENSES/GPL-3.0-or-later.txt000066400000000000000000001032461477325711200177610ustar00rootroot00000000000000GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gnss-sdr-0.0.20/LICENSES/LGPL-3.0-only.txt000066400000000000000000000164071477325711200173330ustar00rootroot00000000000000GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. gnss-sdr-0.0.20/LICENSES/LicenseRef-Apple-Permissive.txt000066400000000000000000000043331477325711200225150ustar00rootroot00000000000000This Apple software is supplied to you by Apple Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non - exclusive license, under Apple's copyrights in this original Apple software ( the "Apple Software" ), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and / or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. gnss-sdr-0.0.20/LICENSES/MIT.txt000066400000000000000000000021241477325711200157400ustar00rootroot00000000000000MIT License Copyright (c) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. gnss-sdr-0.0.20/LICENSES/Zlib.txt000066400000000000000000000015421477325711200162120ustar00rootroot00000000000000zlib License Copyright (c) This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. gnss-sdr-0.0.20/README.md000066400000000000000000002642401477325711200146310ustar00rootroot00000000000000 [comment]: # ( SPDX-License-Identifier: GPL-3.0-or-later ) [comment]: # ( SPDX-FileCopyrightText: 2011-2025 Carles Fernandez-Prades ) [![](./docs/doxygen/images/gnss-sdr_logo.png)](https://gnss-sdr.org "GNSS-SDR website") [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![REUSE status](https://api.reuse.software/badge/github.com/gnss-sdr/gnss-sdr)](https://api.reuse.software/info/github.com/gnss-sdr/gnss-sdr) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](CODE_OF_CONDUCT.md) **Welcome to GNSS-SDR!** This program is a software-defined receiver which is able to process (that is, to perform detection, synchronization, demodulation and decoding of the navigation message, computation of observables, and, finally, computation of position fixes) the following Global Navigation Satellite System's signals: In the L1 band: - 🛰 GLONASS L1 C/A (centered at 1602.000 MHz) :white_check_mark: - 🛰 GPS L1 C/A (centered at 1575.420 MHz) :white_check_mark: - 🛰 Galileo E1b/c (centered at 1575.420 MHz) :white_check_mark: - 🛰 BeiDou B1I (centered at 1561.098 MHz) :white_check_mark: In the E6 band: - 🛰 Galileo E6B (centered at 1278.750 MHz) :white_check_mark: In the L2 band: - 🛰 BeiDou B3I (centered at 1268.520 MHz) :white_check_mark: - 🛰 GLONASS L2 C/A (centered at 1246.000 MHz) :white_check_mark: - 🛰 GPS L2C (centered at 1227.600 MHz) :white_check_mark: In the L5 band: - 🛰 Galileo E5b (centered at 1207.140 MHz) :white_check_mark: - 🛰 Galileo E5a (centered at 1176.450 MHz) :white_check_mark: - 🛰 GPS L5 (centered at 1176.450 MHz) :white_check_mark: GNSS-SDR provides interfaces for a wide range of radio frequency front-ends and raw sample file formats, generates processing outputs in standard formats, allows for the full inspection of the whole signal processing chain, and offers a framework for the development of new features. Please visit [https://gnss-sdr.org](https://gnss-sdr.org "GNSS-SDR website") for more information about this open-source, software-defined GNSS receiver. :sparkles: See what's new in the [changelog](./docs/CHANGELOG.md). # Table of Contents
(click to expand) - [Table of Contents](#table-of-contents) - [How to build GNSS-SDR](#how-to-build-gnss-sdr) - [GNU/Linux](#gnulinux) - [Alternative 1: Install dependencies using software packages](#alternative-1-install-dependencies-using-software-packages) - [Debian / Ubuntu](#debian--ubuntu) - [AlmaLinux](#almalinux) - [Arch Linux](#arch-linux) - [Fedora](#fedora) - [openSUSE](#opensuse) - [Rocky Linux](#rocky-linux) - [Alternative 2: Install dependencies using PyBOMBS](#alternative-2-install-dependencies-using-pybombs) - [Manual installation of other required dependencies](#manual-installation-of-other-required-dependencies) - [Install Armadillo, a C++ linear algebra library](#install-armadillo-a-c-linear-algebra-library) - [Install Gflags, a commandline flags processing module for C++](#install-gflags-a-commandline-flags-processing-module-for-c) - [Install Glog, a library that implements application-level logging](#install-glog-a-library-that-implements-application-level-logging) - [Install the OpenSSL libraries](#install-the-openssl-libraries) - [Install Matio, MATLAB MAT file I/O library](#install-matio-matlab-mat-file-io-library) - [Install Protocol Buffers, a portable mechanism for serialization of structured data](#install-protocol-buffers-a-portable-mechanism-for-serialization-of-structured-data) - [Install Pugixml, a light-weight C++ XML processing library](#install-pugixml-a-light-weight-c-xml-processing-library) - [Download GoogleTest](#download-googletest) - [Clone GNSS-SDR's Git repository](#clone-gnss-sdrs-git-repository) - [Build and install GNSS-SDR](#build-and-install-gnss-sdr) - [Build OSMOSDR support (OPTIONAL)](#build-osmosdr-support-optional) - [Build FMCOMMS2 based SDR Hardware support (OPTIONAL)](#build-fmcomms2-based-sdr-hardware-support-optional) - [Build OpenCL support (OPTIONAL)](#build-opencl-support-optional) - [Build CUDA support (OPTIONAL)](#build-cuda-support-optional) - [macOS](#macos) - [Macports](#macports) - [Homebrew](#homebrew) - [Other package managers](#other-package-managers) - [Build GNSS-SDR](#build-gnss-sdr) - [Other builds](#other-builds) - [Updating GNSS-SDR](#updating-gnss-sdr) - [Getting started](#getting-started) - [Using GNSS-SDR](#using-gnss-sdr) - [Control plane](#control-plane) - [Configuration](#configuration) - [GNSS block factory](#gnss-block-factory) - [Signal Processing plane](#signal-processing-plane) - [Signal Source](#signal-source) - [Signal Conditioner](#signal-conditioner) - [Data type adapter](#data-type-adapter) - [Input filter](#input-filter) - [Resampler](#resampler) - [Channel](#channel) - [Acquisition](#acquisition) - [Tracking](#tracking) - [Decoding of the navigation message](#decoding-of-the-navigation-message) - [Observables](#observables) - [Computation of Position, Velocity, and Time](#computation-of-position-velocity-and-time) - [About the software license](#about-the-software-license) - [Publications and Credits](#publications-and-credits) - [Ok, now what?](#ok-now-what)
# How to build GNSS-SDR This section describes how to set up the compilation environment in GNU/Linux or [macOS / Mac OS X](#macos), and to build GNSS-SDR. See also our [build and install page](https://gnss-sdr.org/build-and-install/ "GNSS-SDR's Build and Install"). ## GNU/Linux - Tested distributions: Ubuntu 14.04 LTS and above; Debian 9.0 "stretch" and above; Arch Linux; Fedora 26 and above; OpenSUSE 42.3 and above. - Supported microprocessor architectures: - amd64: also known as x86-64, the 64-bit version of the x86 instruction set, originally created by AMD and implemented by AMD, Intel, VIA, and others. - armel: ARM embedded ABI, supported on ARM v4t and higher. - armhf: ARM hard float, ARMv7 + VFP3-D16 floating-point hardware extension + Thumb-2 instruction set and above. - arm64: ARM 64 bits or ARMv8. Also known as AArch64. - i386: Intel x86 instruction set (32-bit microprocessors). - loong64: 64-bit version of LoongArch, a RISC-style instruction set architecture developed by Loongson Technology. - mips: MIPS architecture (big-endian, such as those manufactured by SGI). - mipsel: MIPS architecture (little-endian, such as Loongson 3). - mips64el: 64-bit version of MIPS architecture. - powerpc: the RISC 32-bit microprocessor architecture developed by IBM, Motorola (now Freescale), and Apple. - ppc64: 64-bit big-endian PowerPC architecture. - ppc64el: 64-bit little-endian PowerPC architecture. - riscv64: 64-bit RISC-V open standard instruction set architecture. - s390x: IBM System z architecture for mainframe computers. Older distribution releases might work as well, but you will need GCC 4.7 or newer. Before building GNSS-SDR, you need to install all the required dependencies. There are two alternatives here: through software packages or building them from the source code. It is in general not a good idea to mix both approaches. ### Alternative 1: Install dependencies using software packages If you want to start building and running GNSS-SDR as quickly and easily as possible, the best option is to install all the required dependencies as binary packages. #### Debian / Ubuntu If you are using Debian 9, Ubuntu 14.10 or above, this can be done by copying and pasting the following line in a terminal: ``` $ sudo apt install build-essential cmake git pkg-config libboost-dev libboost-date-time-dev \ libboost-system-dev libboost-filesystem-dev libboost-thread-dev libboost-chrono-dev \ libboost-serialization-dev liblog4cpp5-dev libuhd-dev gnuradio-dev gr-osmosdr \ libblas-dev liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev \ libssl-dev libpcap-dev libmatio-dev libpugixml-dev libgtest-dev \ libprotobuf-dev libcpu-features-dev protobuf-compiler python3-mako ``` Please note that the required files from `libgtest-dev` were named `googletest` in Debian 9 "stretch" and Ubuntu 18.04 "bionic", and renamed to `libgtest-dev` in Debian 10 "buster" and above. In distributions older than Ubuntu 21.04 Hirsute / Debian 11, the package `libcpu-features-dev` is not required. In distributions older than Ubuntu 22.04 Jammy / Debian 12, the package `libssl-dev` must be replaced by `libgnutls-openssl-dev`. **Note for Ubuntu 14.04 LTS "trusty" users:** you will need to build from source and install GNU Radio manually, as explained below, since GNSS-SDR requires `gnuradio-dev` >= 3.7.3, and Ubuntu 14.04 came with 3.7.2. Install all the packages above BUT EXCEPT `libuhd-dev`, `gnuradio-dev`, and `gr-osmosdr` (and remove them if they are already installed in your machine), and install those dependencies using PyBOMBS. The same applies to `libmatio-dev`: Ubuntu 14.04 came with 1.5.2 and the minimum required version is 1.5.3. Please do not install the `libmatio-dev` package and install `libtool`, `automake` and `libhdf5-dev` instead. A recent version of the library will be downloaded and built automatically if CMake does not find it installed. In distributions older than Ubuntu 16.04 or Debian 9, `python3-mako` must be replaced by `python-mako`. For Ubuntu 14.04, you will need to add the package `python-six` to the list of dependencies. Once you have installed these packages, you can jump directly to [download the source code and build GNSS-SDR](#clone-gnss-sdrs-git-repository). #### AlmaLinux If you are using AlmaLinux: ``` # dnf update -y # dnf install -y 'dnf-command(config-manager)' # dnf config-manager --set-enabled powertools # dnf install -y epel-release # dnf install -y make gcc gcc-c++ kernel-devel cmake git boost-devel \ boost-date-time boost-system boost-thread boost-chrono \ boost-serialization log4cpp-devel gmp-devel uhd-devel gnuradio-devel \ pugixml-devel matio-devel protobuf-devel glog-devel libpcap-devel \ blas-devel lapack-devel armadillo-devel openssl-devel python3-mako \ libarchive ``` Once you have installed these packages, you can jump directly to [download the source code and build GNSS-SDR](#clone-gnss-sdrs-git-repository). #### Arch Linux If you are using Arch Linux: ``` $ pacman -S gcc make cmake pkgconf git boost boost-libs libvolk gnuradio \ blas lapack hdf5 openssl pugixml libmatio protobuf libpcap gtest \ python-mako ``` Once you have installed these packages, you can jump directly to [download the source code and build GNSS-SDR](#clone-gnss-sdrs-git-repository). #### Fedora If you are using Fedora 26 or above, the required software dependencies can be installed by doing: ``` $ sudo yum install make automake gcc gcc-c++ kernel-devel cmake git boost-devel \ boost-date-time boost-system boost-filesystem boost-thread boost-chrono \ boost-serialization log4cpp-devel gnuradio-devel gr-osmosdr-devel \ blas-devel lapack-devel matio-devel armadillo-devel gflags-devel \ glog-devel openssl-devel libpcap-devel pugixml-devel python3-mako \ protobuf-devel protobuf-compiler ``` In Fedora 33 and above, you will need to add `gmp-devel` to the package list. Optionally, you can add `uhd-devel` starting from Fedora 32. In Fedora 36 and above, packages `spdlog-devel` and `fmt-devel` are also required. #### openSUSE If you are using openSUSE Leap: ``` $ zypper install cmake git gcc-c++ boost-devel libboost_atomic-devel \ libboost_system-devel libboost_filesystem-devel libboost_chrono-devel \ libboost_thread-devel libboost_serialization-devel log4cpp-devel \ gnuradio-devel pugixml-devel libpcap-devel armadillo-devel libtool \ automake hdf5-devel openssl-devel python3-Mako libmatio-devel ``` If you are using openSUSE Tumbleweed: ``` $ zypper install cmake git gcc-c++ boost-devel libboost_atomic-devel \ libboost_system-devel libboost_filesystem-devel libboost_date_time-devel \ libboost_thread-devel libboost_chrono-devel libboost_serialization-devel \ spdlog-devel fmt-devel gtest gnuradio-devel pugixml-devel libpcap-devel \ armadillo-devel libtool automake hdf5-devel libopenssl-devel \ python3-Mako protobuf-devel ``` Once you have installed these packages, you can jump directly to [download the source code and build GNSS-SDR](#clone-gnss-sdrs-git-repository). #### Rocky Linux If you are using Rocky Linux: ``` $ dnf install -y 'dnf-command(config-manager)' $ dnf config-manager --set-enabled powertools $ yum install -y epel-release $ yum install -y make gcc gcc-c++ kernel-devel cmake git boost-devel \ boost-date-time boost-system boost-thread boost-chrono boost-serialization \ log4cpp-devel gmp-devel uhd-devel gnuradio-devel pugixml-devel matio-devel \ protobuf-devel glog-devel libpcap-devel blas-devel lapack-devel \ armadillo-devel openssl-devel python3-mako libarchive ``` Once you have installed these packages, you can jump directly to [download the source code and build GNSS-SDR](#clone-gnss-sdrs-git-repository). ### Alternative 2: Install dependencies using PyBOMBS This option is adequate if you are interested in development, in working with the most recent versions of software dependencies, want more fine-tuning on the installed versions, or simply in building everything from the scratch just for the fun of it. In such cases, we recommend using [PyBOMBS](https://github.com/gnuradio/pybombs "Python Build Overlay Managed Bundle System") (Python Build Overlay Managed Bundle System), GNU Radio's meta-package manager tool that installs software from source, or whatever the local package manager is, that automatically does all the work for you. Please take a look at the configuration options and general PyBOMBS usage at https://github.com/gnuradio/pybombs. Here we provide a quick step-by-step tutorial. First of all, install some basic packages: ``` $ sudo apt install git python3-pip ``` Download, build and install PyBOMBS: ``` $ sudo pip3 install --upgrade git+https://github.com/gnuradio/pybombs.git ``` Apply a configuration: ``` $ pybombs auto-config ``` Add list of default recipes: ``` $ pybombs recipes add-defaults ``` Download, build and install GNU Radio, related drivers, and some other extra modules into the directory `/path/to/prefix` (replace this path by your preferred one, for instance `$HOME/sdr`): ``` $ pybombs prefix init /path/to/prefix -a myprefix -R gnuradio-default ``` This will perform a local installation of the dependencies under `/path/to/prefix`, so they will not be visible when opening a new terminal. In order to make them available, you will need to set up the adequate environment variables: ``` $ cd /path/to/prefix $ . ./setup_env.sh ``` Now you are ready to use GNU Radio and to jump into building GNSS-SDR after installing a few other dependencies. Actually, those are steps that PyBOMBS can do for you as well: ``` $ pybombs install gnss-sdr ``` By default, PyBOMBS installs the ‘next’ branch of GNSS-SDR development, which is the most recent version of the source code. This behavior can be modified by altering the corresponding recipe at `$HOME/.pybombs/recipes/gr-recipes/gnss-sdr.lwr` In case you do not want to use PyBOMBS and prefer to build and install GNSS-SDR step by step (i.e., cloning the repository and doing the usual `cmake .. && make && make install` dance), Armadillo, GFlags, Glog, GnuTLS, and Matio can be installed either by using PyBOMBS: ``` $ pybombs install armadillo gflags glog gnutls matio ``` or manually as explained below, and then please follow instructions on how to [download the source code and build GNSS-SDR](#clone-gnss-sdrs-git-repository). ### Manual installation of other required dependencies #### Install [Armadillo](https://arma.sourceforge.net/ "Armadillo's Homepage"), a C++ linear algebra library ``` $ sudo apt install libblas-dev liblapack-dev # For Debian/Ubuntu/LinuxMint $ sudo yum install lapack-devel blas-devel # For Fedora/RHEL $ sudo zypper install lapack-devel blas-devel # For OpenSUSE $ sudo pacman -S blas lapack # For Arch Linux $ wget https://sourceforge.net/projects/arma/files/armadillo-14.4.1.tar.xz $ tar xvfz armadillo-14.4.1.tar.xz $ cd armadillo-14.4.1 $ cmake . $ make $ sudo make install ``` The full stop separated from `cmake` by a space is important. [CMake](https://cmake.org/ "CMake's Homepage") will figure out what other libraries are currently installed and will modify Armadillo's configuration correspondingly. CMake will also generate a run-time armadillo library, which is a combined alias for all the relevant libraries present on your system (e.g., BLAS, LAPACK, and ATLAS). #### Install [Gflags](https://github.com/gflags/gflags "Gflags' Homepage"), a commandline flags processing module for C++ ``` $ wget https://github.com/gflags/gflags/archive/v2.2.2.tar.gz $ tar xvfz v2.2.2.tar.gz $ cd gflags-2.2.2 $ cmake -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DBUILD_gflags_nothreads_LIB=OFF . $ make $ sudo make install $ sudo ldconfig ``` Please note that GFlags is replaced by the [Abseil Flags Library](https://abseil.io/docs/cpp/guides/flags) if Abseil >= v20240116 is available in your system. #### Install [Glog](https://github.com/google/glog "Glog's Homepage"), a library that implements application-level logging ``` $ wget https://github.com/google/glog/archive/v0.7.1.tar.gz $ tar xvfz v0.7.1.tar.gz $ cd glog-0.7.1 $ mkdir build && cd build $ cmake .. $ make $ sudo make install $ sudo ldconfig ``` Please note that Glog is replaced by the [Abseil Logging Library](https://abseil.io/docs/cpp/guides/logging) if Abseil >= v20240116 is available in your system. #### Install the OpenSSL libraries ``` $ sudo apt install libssl-dev # For Debian/Ubuntu/LinuxMint $ sudo yum install openssl-devel # For Fedora/CentOS/RHEL $ sudo zypper install openssl-devel # For OpenSUSE $ sudo pacman -S openssl # For Arch Linux ``` #### Install [Matio](https://github.com/tbeu/matio "Matio's Homepage"), MATLAB MAT file I/O library ``` $ wget https://github.com/tbeu/matio/releases/download/v1.5.28/matio-1.5.28.tar.gz $ tar xvfz matio-1.5.28.tar.gz $ cd matio-1.5.28 $ ./configure $ make $ sudo make install $ sudo ldconfig ``` #### Install [Protocol Buffers](https://protobuf.dev/ "Protocol Buffers' Homepage"), a portable mechanism for serialization of structured data GNSS-SDR requires Protocol Buffers v3.0.0 or later. If the packages that come with your distribution are older than that (_e.g._, Ubuntu 16.04 Xenial came with an older versions), then you will need to install it manually: ``` $ git clone --recursive https://github.com/protocolbuffers/protobuf.git $ cd protobuf $ cmake -DABSL_PROPAGATE_CXX_STD=ON -Dprotobuf_BUILD_TESTS=OFF . $ cmake --build --config Release --target install . $ sudo ldconfig ``` For more options, please check the [Protocol Buffers' installation instructions](https://github.com/protocolbuffers/protobuf/blob/main/src/README.md/). #### Install [Pugixml](https://pugixml.org/ "Pugixml's Homepage"), a light-weight C++ XML processing library ``` $ wget https://github.com/zeux/pugixml/releases/download/v1.15/pugixml-1.15.tar.gz $ tar xvfz pugixml-1.15.tar.gz $ cd pugixml-1.15 $ mkdir build && cd build $ cmake .. $ make $ sudo make install $ sudo ldconfig ``` #### Download [GoogleTest](https://github.com/google/googletest "Googletest Homepage") ``` $ wget https://github.com/google/googletest/archive/refs/tags/v1.16.0.zip $ unzip v1.16.0.zip ``` Please **DO NOT build or install** Google Test. Every user needs to compile tests using the same compiler flags used to compile the Google Test libraries; otherwise, he or she may run into undefined behaviors (_i.e._, the tests can behave strangely and may even crash for no obvious reasons). The explanation is that C++ has the One-Definition Rule: if two C++ source files contain different definitions of the same class/function/variable, and you link them together, you violate the rule. The linker may or may not catch the error (in many cases it is not required by the C++ standard to catch the violation). If it does not, you get strange run-time behaviors that are unexpected and hard to debug. If you compile Google Test and your test code using different compiler flags, they may see different definitions of the same class/function/variable (_e.g._, due to the use of `#if` in Google Test). Therefore, for your sanity, GNSS-SDR does not make use of pre-compiled Google Test libraries. Instead, it compiles Google Test's source code itself, such that it can be sure that the same flags are used for both Google Test and the tests. The building system of GNSS-SDR manages the compilation and linking of Google Test's source code to its own tests; it is only required that you tell the system where the Google Test folder that you downloaded resides. Just type in your terminal (or add it to your `$HOME/.bashrc` file for a permanent solution) the following line: ``` export GTEST_DIR=/home/username/googletest-1.16.0 ``` changing `/home/username/googletest-1.16.0` by the actual path where you unpacked Google Test. If the CMake script does not find that folder, or the environment variable is not defined, or the source code is not installed by a package, then it will download a fresh copy of the Google Test source code and will compile and link it for you. ### Clone GNSS-SDR's Git repository ``` $ git clone https://github.com/gnss-sdr/gnss-sdr ``` Cloning the GNSS-SDR repository as in the line above will create a folder named gnss-sdr with the following structure: ``` |-gnss-sdr |---cmake <- CMake-related files. |---conf <- Configuration files. Each file defines one particular receiver. |---docs <- Contains documentation-related files. |---install <- Executables will be placed here. |---src <- Source code folder. |-----algorithms <- Signal processing blocks. |-----core <- Control plane, interfaces, systems' parameters. |-----main <- Main function of the C++ program. |---tests <- QA code. |---utils <- some utilities (e.g. Matlab scripts). ``` By default, you will be in the 'main' branch of the Git repository, which corresponds to the latest stable release. If you want to try the latest developments, you can use the 'next' branch by going to the newly created gnss-sdr folder doing: ``` $ git checkout next ``` More information about GNSS-SDR-specific Git usage and pointers to further readings can be found at our [Git tutorial](https://gnss-sdr.org/docs/tutorials/using-git/ "Using Git"). ### Build and install GNSS-SDR Go to GNSS-SDR's build directory: ``` $ cd gnss-sdr ``` Configure and build the application: ``` $ cmake -S . -B build $ cmake --build build ``` By default, CMake will build the Release version, meaning that the compiler will generate a fast, optimized executable. This is the recommended build type when using an RF front-end and you need to attain real-time. If working with a file (and thus without real-time constraints), you may want to obtain more information about the internals of the receiver, as well as more fine-grained logging. This can be done by building the Debug version, by doing: ``` $ cmake -S . -B build-debug -DCMAKE_BUILD_TYPE=Debug $ cmake --build build-debug ``` This will create four executables at gnss-sdr/install, namely `gnss-sdr`, `run_tests`, `front-end-cal` and `volk_gnsssdr_profile`. You can run them from that folder, but if you prefer to install `gnss-sdr` on your system and have it available anywhere else, do: ``` $ sudo cmake --install build ``` This will also make a copy of the conf/ folder into /usr/local/share/gnss-sdr/conf for your reference. We suggest creating a working directory at your preferred location and store your own configuration and data files there. You could be interested in creating the documentation (requires: `sudo apt install doxygen-latex` in Ubuntu/Debian) by doing: ``` $ cmake --build build --target doc ``` This will generate HTML documentation that can be retrieved pointing your browser of preference to `build/docs/html/index.html`. If a LaTeX installation is detected in your system, ``` $ cmake --build build --target pdfmanual ``` will create a PDF manual at build/docs/GNSS-SDR_manual.pdf. Finally, ``` $ cmake --build build --target doc-clean ``` will remove the content of previously generated documentation. GNSS-SDR comes with a library which is a module of the Vector-Optimized Library of Kernels (so-called [VOLK_GNSSSDR](./src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/README.md)) and a profiler that will build a config file for the best SIMD architecture for your processor. Run `volk_gnsssdr_profile` that is installed into `$PREFIX/bin`. This program tests all known VOLK kernels for each architecture supported by the processor. When finished, it will write to `$HOME/.volk_gnsssdr/volk_gnsssdr_config` the best architecture for the VOLK function. This file is read when using a function to know the best version of the function to execute. It mimics GNU Radio's [VOLK](https://www.libvolk.org/) library, so if you still have not run `volk_profile`, this is a good moment to do so. #### Build OSMOSDR support (OPTIONAL) Install the [OsmoSDR](https://osmocom.org/projects/sdr "OsmoSDR's Homepage") library and GNU Radio's source block: ``` $ git clone git://git.osmocom.org/osmo-sdr.git $ cd osmo-sdr/software/libosmosdr $ mkdir build $ cd build/ $ cmake .. $ make $ sudo make install $ sudo ldconfig $ cd ../.. $ git clone git://git.osmocom.org/gr-osmosdr $ cd gr-osmosdr $ mkdir build $ cd build $ cmake .. -Wno-dev $ make $ sudo make install $ sudo ldconfig ``` Then, configure GNSS-SDR to build the `Osmosdr_Signal_Source` by: ``` $ cmake -S . -B build -DENABLE_OSMOSDR=ON $ cmake --build build $ sudo cmake --install build ``` (in order to disable the `Osmosdr_Signal_Source` compilation, you can pass `-DENABLE_OSMOSDR=OFF` to cmake and build GNSS-SDR again). #### Build FMCOMMS2 based SDR Hardware support (OPTIONAL) Install the [libiio](https://github.com/analogdevicesinc/libiio.git) (>=v0.11), [libad9361](https://github.com/analogdevicesinc/libad9361-iio.git) (>=v0.1-1) libraries and [gr-iio](https://github.com/analogdevicesinc/gr-iio.git) (>v0.3) gnuradio block: ``` $ sudo apt install libxml2-dev bison flex $ git clone https://github.com/analogdevicesinc/libiio.git $ cd libiio $ mkdir build $ cd build $ cmake .. $ make && sudo make install && sudo ldconfig $ cd ../.. $ git clone https://github.com/analogdevicesinc/libad9361-iio.git $ cd libad9361-iio $ mkdir build $ cd build $ cmake .. $ make && sudo make install && sudo ldconfig $ cd ../.. $ git clone https://github.com/analogdevicesinc/gr-iio.git $ cd gr-iio $ mkdir build $ cd build $ cmake -DCMAKE_INSTALL_PREFIX=/usr .. $ make && sudo make install && sudo ldconfig $ cd ../.. ``` Then configure GNSS-SDR to build the `Fmcomms2_Signal_Source` implementation: ``` $ cd gnss-sdr $ cmake -S . -B build -DENABLE_FMCOMMS2=ON $ cmake --build build $ sudo cmake --install build ``` or configure it to build `Plutosdr_Signal_Source`: ``` $ cmake -S . -B build -DENABLE_PLUTOSDR=ON $ cmake --build build $ sudo cmake --install build ``` With `Fmcomms2_Signal_Source` you can use any SDR hardware based on [FMCOMMS2](https://wiki.analog.com/resources/eval/user-guides/ad-fmcomms2-ebz), including the ADALM-PLUTO (PlutoSdr) by configuring correctly the .conf file. The `Plutosdr_Signal_Source` offers a simpler manner to use the ADALM-PLUTO because implements only a subset of FMCOMMS2's parameters valid for those devices. #### Build OpenCL support (OPTIONAL) In order to enable the building of blocks that use OpenCL, type: ``` $ cmake -S . -B build -DENABLE_OPENCL=ON $ cmake --build build $ sudo cmake --install build ``` #### Build CUDA support (OPTIONAL) In order to enable the building of blocks that use CUDA, NVIDIA's parallel programming model that enables graphics processing unit (GPU) acceleration for data-parallel computations, first you need to install the CUDA Toolkit from [NVIDIA Developers Download page](https://developer.nvidia.com/cuda-downloads "CUDA Downloads"). Make sure that the SDK samples build well. Then, build GNSS-SDR by doing: ``` $ cmake -S . -B build -DENABLE_CUDA=ON $ cmake --build build $ sudo cmake --install build ``` Of course, you will also need a GPU that [supports CUDA](https://developer.nvidia.com/cuda-gpus "CUDA GPUs"). ## macOS GNSS-SDR can be built on macOS (or the former Mac OS X), starting from 10.9 (Mavericks) and including 14 (Sonoma). If you still have not installed [Xcode](https://developer.apple.com/xcode/ "Xcode"), do it now from the App Store (it's free). You will also need the Xcode Command Line Tools, which do not come by default in macOS versions older than Big Sur. If you are using an older version, please launch the Terminal, found in /Applications/Utilities/, and type: ``` $ xcode-select --install ``` Agree to Xcode license: ``` $ sudo xcodebuild -license ``` Software pre-requisites can be installed using either [Macports](#macports) or [Homebrew](#homebrew). ### Macports First, [install Macports](https://www.macports.org/install.php). If you are upgrading from a previous installation, please follow the [migration rules](https://trac.macports.org/wiki/Migration). In a terminal, type: ``` $ sudo port selfupdate $ sudo port upgrade outdated $ sudo port install armadillo cmake pkgconfig protobuf3-cpp pugixml openssl3 $ sudo port install gnuradio +uhd +grc +zeromq $ sudo port install boost matio libad9361-iio libiio abseil $ sudo port install py313-mako $ sudo port install doxygen +docs ``` For macOS versions older than Sonoma, you will also need LAPACK: ``` $ sudo port install lapack ``` You also might need to activate a Python installation. The list of installed versions can be retrieved with: ``` $ port select --list python ``` and you can activate a certain version by typing: ``` $ sudo port select --set python python313 ``` ### Homebrew First, install [Homebrew](https://brew.sh/). Paste this in a terminal prompt: ``` $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" ``` The script explains what it will do, and then it pauses before doing it. There are more installation options [here](https://docs.brew.sh/Installation.html). Install the required dependencies: ``` $ brew update && brew upgrade $ brew install armadillo cmake hdf5 gnuradio libmatio openssl pkg-config protobuf pugixml boost $ brew install --cask mactex # when completed, restart Terminal $ brew install graphviz doxygen ¢ pip3 install mako ``` For macOS versions older than Sonoma, you will also need LAPACK: ``` $ brew install lapack ``` ### Other package managers GNU Radio and other dependencies can also be installed using other package managers than Macports, such as [Fink](https://www.finkproject.org/ "Fink"). Since the version of Python that ships with OS X is great for learning but it is not good for development, you could have another Python executable in a non-standard location. If that is the case, you need to inform GNSS-SDR's configuration system by defining the `PYTHON_EXECUTABLE` variable as: ``` $ cmake -S . -B build -DPYTHON_EXECUTABLE=/path/to/bin/python3 ``` In case you have installed Macports in a non-standard location, you can use: ``` $ cmake -S . -B build -DCMAKE_PREFIX_PATH=/opt/local -DUSE_MACPORTS_PYTHON=/opt/local/bin/python ``` changing `/opt/local` by the base directory in which your software is installed. The CMake script will create Makefiles that download, build and link Armadillo, Gflags, Glog, Matio, Protocol Buffers, PugiXML and Google Test on the fly at compile time if they are not detected in your machine. ### Build GNSS-SDR Finally, you are ready to clone the GNSS-SDR repository, configure and build the software: ``` $ git clone https://github.com/gnss-sdr/gnss-sdr $ cd gnss-sdr $ cmake -S . -B build $ cmake --build build ``` This will create three executables at `gnss-sdr/install`, namely `gnss-sdr`, `run_tests` and `volk_gnsssdr_profile`. You can install the software receiver on your system by doing: ``` $ sudo cmake --install build ``` and uninstall it with: ``` $ sudo cmake --build build --target uninstall ``` Note, it is advisable not to run the install step in a homebrew environment. The documentation can be built by: ``` $ cmake --build build --target doc ``` and can be viewed doing: ``` $ open ./docs/html/index.html ``` GNSS-SDR comes with a library which is a module of the Vector-Optimized Library of Kernels (so-called [VOLK_GNSSSDR](./src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/README.md)) and a profiler that will build a config file for the best SIMD architecture for your processor. Run `volk_gnsssdr_profile` that is installed into `$PREFIX/bin`. This program tests all known VOLK kernels for each architecture supported by the processor. When finished, it will write to `$HOME/.volk_gnsssdr/volk_gnsssdr_config` the best architecture for the VOLK function. This file is read when using a function to know the best version of the function to execute. It mimics GNU Radio's [VOLK](https://www.libvolk.org/) library, so if you still have not run `volk_profile`, this is a good moment to do so. ## Other builds - **Docker image**: A technology providing operating-system-level virtualization to build, ship, and run distributed applications, whether on laptops, data center VMs, or the cloud. Visit [https://github.com/carlesfernandez/docker-gnsssdr](https://github.com/carlesfernandez/docker-gnsssdr) or [https://github.com/carlesfernandez/docker-pybombs-gnsssdr](https://github.com/carlesfernandez/docker-pybombs-gnsssdr) for instructions. - **Snap package**: [Snaps](https://snapcraft.io) are Linux packages aimed for Ubuntu or Ubuntu-like distros. Visit [https://github.com/carlesfernandez/snapcraft-sandbox](https://github.com/carlesfernandez/snapcraft-sandbox) for instructions, or directly [get the software from the Snap Store](https://snapcraft.io/gnss-sdr-next):

Get GNSS-SDR from the Snap Store

- **GNSS-SDR in embedded platforms**: we provide a Software Development Kit (SDK) based on [OpenEmbedded](https://www.openembedded.org/wiki/Main_Page) for cross-compiling GNSS-SDR in your desktop computer and for producing executables that can run in embedded platforms, such as Xilinx's Zynq and ZynqMP architectures, Raspberry Pi, and many others. Please check [yocto-geniux](https://github.com/carlesfernandez/yocto-geniux) for instructions on how to build bootable images. # Updating GNSS-SDR If you cloned or forked GNSS-SDR some time ago, it is possible that some developer has updated files at the Git repository. If you still have not done so, add the `upstream` repository to the list of remotes: ``` $ git remote add upstream https://github.com/gnss-sdr/gnss-sdr.git ``` and then you can update your working copy by doing: ``` $ git checkout main # Switch to branch you want to update $ git pull upstream main # Download the newest code from our repository ``` or, if you want to test the latest developments: ``` $ git checkout next $ git pull upstream next ``` Before rebuilding the source code, it is safe (and recommended) to remove the remainders of old compilations, _e.g._: ``` $ rm -rf gnss-sdr/build/* ``` If you are interested in contributing to the development of GNSS-SDR, please check out [how to do it](https://gnss-sdr.org/contribute/ "How to contribute to GNSS-SDR source code"). There is a more controlled way to upgrade your repository, which is to use the Git commands `fetch` and `merge`, as described in our [Git Tutorial](https://gnss-sdr.org/docs/tutorials/using-git/ "Using Git"). # Getting started 1. After building the code, you will find the `gnss-sdr` executable file at gnss-sdr/install. You can make it available everywhere else by `sudo make install`. Run the profilers `volk_profile` and `volk_gnsssdr_profile` for testing all available VOLK kernels for each architecture supported by your processor. This only has to be done once. 2. In post-processing mode, you have to provide a captured GNSS signal file. 1. The signal file can be easily recorded using the GNU Radio file sink in `gr_complex` mode. 2. You will need a GPS active antenna, a [USRP](https://www.ettus.com/products/) and a suitable USRP daughter board to receive GPS L1 C/A signals. GNSS-SDR requires to have at least 2 MHz of bandwidth in 1.57542 GHz. (remember to enable the DC bias with the daughterboard jumper). We use a [DBSRX2](https://www.ettus.com/all-products/DBSRX2/) to do the task, but you can try the newer Ettus' daughter boards as well. 3. The easiest way to capture a signal file is to use the GNU Radio Companion GUI. Only two blocks are needed: a USRP signal source connected to a complex float file sink. You need to tune the USRP central frequency and decimation factor using the USRP signal source properties box. We suggest using a decimation factor of 20 if you use the USRP2. This will give you 100/20 = 5 MSPS which will be enough to receive GPS L1 C/A signals. The front-end gain should also be configured. In our test with the DBSRX2 we obtained good results with `G=50`. 4. Capture at least 80 seconds of signal in open sky conditions. During the process, be aware of USRP driver buffer underruns messages. If your hard disk is not fast enough to write data at this speed you can capture it to a virtual RAM drive. 80 seconds of signal at 5 MSPS occupies less than 3 Gbytes using `gr_complex`. If you have no access to an RF front-end, you can download a sample raw data file (that contains GPS and Galileo signals) from [here](https://sourceforge.net/projects/gnss-sdr/files/data/). 3. You are ready to configure the receiver to use your captured file among other parameters: 1. The default configuration file resides at [/usr/local/share/gnss-sdr/conf/default.conf](./conf/gnss-sdr.conf). 2. You need to review/modify at least the following settings: - `SignalSource.filename=` (absolute or relative route to your GNSS signal captured file) - `GNSS-SDR.internal_fs_sps=` (captured file sampling rate in samples per second) - `SignalSource.sampling_frequency=` (captured file sampling rate in samples per second) - `SignalConditioner.sample_freq_in=` (captured file sampling rate in samples per second) - `SignalConditioner.sample_freq_out=` (captured file sampling rate in samples per second) 3. The configuration file has in-line documentation, you can try to tune the number of channels and several receiver parameters. Store your .conf file in some working directory of your choice. 4. Run the receiver invoking the configuration by `$ gnss-sdr --config_file=/path/to/my_receiver.conf` The program reports the current status in text mode, directly to the terminal window. If all goes well, and GNSS-SDR is able to successfully track and decode at least 4 satellites, you will get PVT fixes. The program will write .kml, .geojson and RINEX files in the folder from which `gnss-sdr` was run. In addition to the console output, GNSS-SDR also writes log files at /tmp/ (configurable with the commandline flag `./gnss-sdr --log_dir=/path/to/log`). For more information, check out our [quick start guide](https://gnss-sdr.org/quick-start-guide/). # Using GNSS-SDR With GNSS-SDR, you can define your own receiver, work with captured raw data or from an RF front-end, dump into files intermediate signals, or tune every single algorithm used in the signal processing. All the configuration is done in a single file. Those configuration files reside at the [gnss-sdr/conf/](./conf/) folder (or at /usr/local/share/gnss-sdr/conf if you installed the program). By default, the executable `gnss-sdr` will read the configuration available at `gnss-sdr/conf/gnss-sdr.conf` (or at (usr/local/share/gnss-sdr/conf/default.conf if you installed the program). You can edit that file to fit your needs, or even better, define a new `my_receiver.conf` file with your own configuration. This new receiver can be generated by invoking gnss-sdr with the `--config_file` flag pointing to your configuration file: ``` $ gnss-sdr --config_file=/path/to/my_receiver.conf ``` You can use a single configuration file for processing different data files, specifying the file to be processed with the `--signal_source` flag: ``` $ gnss-sdr --config_file=../conf/my_receiver.conf --signal_source=./my_captured_data.dat ``` This will override the `SignalSource.filename` specified in the configuration file. ## Control plane ![](./docs/doxygen/images/GeneralBlockDiagram.png) GNSS-SDR's main method initializes the logging library, processes the command line flags, if any, provided by the user and instantiates a [ControlThread](./src/core/receiver/control_thread.h) object. Its constructor reads the configuration file, creates a control queue, and creates a flowgraph according to the configuration. Then, the program's main method calls the run() method of the instantiated object, an action that connects the flowgraph and starts running it. After that, and until a stop message is received, it reads control messages sent by the receiver's modules through a safe-thread queue and processes them. Finally, when a stop message is received, the main method executes the destructor of the ControlThread object, which deallocates memory, does other cleanup, and exits the program. The [GNSSFlowgraph](./src/core/receiver/gnss_flowgraph.h) class is responsible for preparing the graph of blocks according to the configuration, running it, modifying it during run-time, and stopping it. Blocks are identified by their role. This class knows which roles it has to instantiate and how to connect them. It relies on the configuration to get the correct instances of the roles it needs and then it applies the connections between GNU Radio blocks to make the graph ready to be started. The complexity related to managing the blocks and the data stream is handled by GNU Radio's `gr::top_block` class. GNSSFlowgraph wraps the `gr::top_block` instance so we can take advantage of the `gnss_block_factory` (see below), the configuration system, and the processing blocks. This class is also responsible for applying changes to the configuration of the flowgraph during run-time, dynamically reconfiguring channels: it selects the strategy for selecting satellites. This can range from a sequential search over all the satellites' ID to other more efficient approaches. The Control Plane is in charge of creating a flowgraph according to the configuration and then managing the modules. Configuration allows users to define in an easy way their own custom receiver by specifying the flowgraph (type of signal source, number of channels, algorithms to be used for each channel and each module, strategies for satellite selection, type of output format, etc.). Since it is difficult to foresee what future module implementations will be needed in terms of configuration, we used a very simple approach that can be extended without a major impact on the code. This can be achieved by simply mapping the names of the variables in the modules with the names of the parameters in the configuration. ### Configuration Properties are passed around within the program using the [ConfigurationInterface](./src/core/interfaces/configuration_interface.h) class. There are two implementations of this interface: [FileConfiguration](./src/core/receiver/file_configuration.h) and [InMemoryConfiguration](./src/core/receiver/in_memory_configuration.h). FileConfiguration reads the properties (pairs of property name and value) from a file and stores them internally. InMemoryConfiguration does not read from a file; it remains empty after instantiation and property values and names are set using the set property method. FileConfiguration is intended to be used in the actual GNSS-SDR application whereas InMemoryConfiguration is intended to be used in tests to avoid file-dependency in the file system. Classes that need to read configuration parameters will receive instances of ConfigurationInterface from where they will fetch the values. For instance, parameters related to SignalSource should look like this: ``` SignalSource.parameter1=value1 SignalSource.parameter2=value2 ``` The name of these parameters can be anything but one reserved word: implementation. This parameter indicates in its value the name of the class that has to be instantiated by the factory for that role. For instance, if our signal source is providing data already at baseband and thus we want to use the implementation [Pass_Through](./src/algorithms/libs/pass_through.h) for module SignalConditioner, the corresponding line in the configuration file would be ``` SignalConditioner.implementation=Pass_Through ``` Since the configuration is just a set of property names and values without any meaning or syntax, the system is very versatile and easily extendable. Adding new properties to the system only implies modifications in the classes that will make use of these properties. In addition, the configuration files are not checked against any strict syntax so it is always in a correct status (as long as it contains pairs of property names and values in the [INI format](https://en.wikipedia.org/wiki/INI_file)). ### GNSS block factory Hence, the application defines a simple accessor class to fetch the configuration pairs of values and passes them to a factory class called [GNSSBlockFactory](./src/core/receiver/gnss_block_factory.h). This factory decides, according to the configuration, which class needs to be instantiated and which parameters should be passed to the constructor. Hence, the factory encapsulates the complexity of blocks' instantiation. With that approach, adding a new block that requires new parameters will be as simple as adding the block class and modifying the factory to be able to instantiate it. This loose coupling between the blocks' implementations and the syntax of the configuration enables extending the application capacities to a high degree. It also allows producing fully customized receivers, for instance a testbed for acquisition algorithms, and to place observers at any point of the receiver chain. More information can be found at the [Control Plane page](https://gnss-sdr.org/docs/control-plane/). ## Signal Processing plane GNU Radio's class `gr::basic_block` is the abstract base class for all signal processing blocks, a bare abstraction of an entity that has a name and a set of inputs and outputs. It is never instantiated directly; rather, this is the abstract parent class of both `gr::hier_block2`, which is a recursive container that adds or removes processing or hierarchical blocks to the internal graph, and `gr::block`, which is the abstract base class for all the processing blocks. ![](./docs/doxygen/images/ClassHierarchy.png) A signal processing flow is constructed by creating a tree of hierarchical blocks, which at any level may also contain terminal nodes that actually implement signal processing functions. Class `gr::top_block` is the top-level hierarchical block representing a flowgraph. It defines GNU Radio runtime functions used during the execution of the program: run(), start(), stop(), wait(), etc. A subclass called [GNSSBlockInterface](./src/core/interfaces/gnss_block_interface.h) is the common interface for all the GNSS-SDR modules. It defines pure virtual methods, that are required to be implemented by a derived class. Subclassing GNSSBlockInterface, we defined interfaces for the GNSS receiver blocks depicted in the figure above. This hierarchy provides the definition of different algorithms and different implementations, which will be instantiated according to the configuration. This strategy allows multiple implementations to share a common interface, achieving the objective of decoupling interfaces from implementations: it defines a family of algorithms, encapsulates each one, and makes them interchangeable. Hence, we let the algorithm vary independently of the program that uses it. Internally, GNSS-SDR makes use of the complex data types defined by [VOLK](https://www.libvolk.org/ "Vector-Optimized Library of Kernels home"). They are fundamental for handling sample streams in which samples are complex numbers with real and imaginary components of 8, 16, or 32 bits, common formats delivered by GNSS (and generic SDR) radio frequency front-ends. The following list shows the data type names that GNSS-SDR exposes through the configuration file: - **`byte`**: Signed integer, 8-bit two's complement number ranging from -128 to 127. C++ type name: `int8_t`. - **`short`**: Signed integer, 16-bit two's complement number ranging from -32768 to 32767. C++ type name: `int16_t` . - **`float`**: Defines numbers with fractional parts, can represent values ranging from approx. 1.5e-45 to 3.4e+38 with a precision of 7 digits (32 bits). C++ type name: `float`. - **`ibyte`**: Interleaved (I&Q) stream of samples of type `byte`. C++ type name: `int8_t`. - **`ishort`**: Interleaved (I&Q) stream of samples of type `short`. C++ type name: `int16_t`. - **`cbyte`**: Complex samples, with real and imaginary parts of type `byte`. C++ type name: `lv_8sc_t`. - **`cshort`**: Complex samples, with real and imaginary parts of type `short`. C++ type name: `lv_16sc_t`. - **`gr_complex`**: Complex samples, with real and imaginary parts of type `float`. C++ type name: `std::complex`. More information about the available processing blocks and their configuration parameters can be found at the [Signal Processing Blocks documentation page](https://gnss-sdr.org/docs/sp-blocks/). ### Signal Source The inputs of a software receiver are the raw bits that come out from the front-end's analog-to-digital converter (ADC). Those bits can be read from a file stored in the hard disk or directly in real-time from a hardware device through USB or Ethernet buses. The Signal Source module is in charge of implementing the hardware driver, that is, the portion of the code that communicates with the RF front-end and receives the samples coming from the ADC. This communication is usually performed through USB or Ethernet buses. Since real-time processing requires a highly optimized implementation of the whole receiver, this module also allows reading samples from a file stored in a hard disk, and thus processing without time constraints. Relevant parameters of those samples are the intermediate frequency (or baseband I&Q components), the sampling rate, and the number of bits per sample, which must be specified by the user in the configuration file. This module also performs bit-depth adaptation, since most of the existing RF front-ends provide samples quantized with 2 or 3 bits, while operations inside the processor are performed on 32- or 64-bit words, depending on its architecture. Although there are implementations of the most intensive computational processes (mainly correlation) that take advantage of specific data types and architectures for the sake of efficiency, the approach is processor-specific and hardly portable. We suggest keeping signal samples in standard data types and letting the compiler select the best library version (implemented using SIMD or any other processor-specific technology) of the required routines for a given processor. **_Example: File Signal Source_** The user can configure the receiver for reading from a file, setting in the configuration file the data file location, sample format, and the sampling frequency and intermediate frequency at what the signal was originally captured. ``` ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/home/user/gnss-sdr/data/my_capture.dat SignalSource.item_type=gr_complex SignalSource.sampling_frequency=4000000 ; Sampling frequency in samples per second (Sps) ``` Type `gr_complex` refers to a GNU Radio typedef equivalent to `std::complex`. In order to save some storage space, you might want to store your signal in a more efficient format such as an I/Q interleaved `short` integer sample stream. In that case, change the corresponding line to: ``` SignalSource.item_type=ishort ``` In this latter case, you will need to convert the interleaved I/Q samples to a complex stream via Data Type Adapter block (see below). **_Example: Two-bit packed file source_** Sometimes, samples are stored in files with a format that is not in the list of _native_ types supported by the `File_Signal_Source` implementation (i.e, it is not among `byte`, `ibyte`, `short`, `ishort`, `float`, or `gr_complex`). This is the case of 2-bit samples, which is a common format delivered by GNSS RF front-ends. The `Two_Bit_Packed_File_Signal_Source` implementation allows reading two-bit length samples from a file. The data is assumed to be packed as bytes `item_type=byte` or shorts `item_type=short` so that there are 4 two-bit samples in each byte. The two-bit values are assumed to have the following interpretation: | **b_1** | **b_0** | **Value** | | :-----: | :-----: | :-------: | | 0 | 0 | +1 | | 0 | 1 | +3 | | 1 | 0 | -3 | | 1 | 1 | -1 | Within a byte the samples may be packed in big-endian `big_endian_bytes=true` (if the most significant byte value is stored at the memory location with the lowest address, the next byte value in significance is stored at the following memory location, and so on) or little-endian `big_endian_bytes=false` (if the least significant byte value is at the lowest address, and the other bytes follow in increasing order of significance). If the order is big-endian then the most significant two bits will form the first sample output. Otherwise, the least significant two bits will be used. Additionally, the samples may be either real `sample_type=real`, or complex. If the sample type is complex, then the samples are either stored in the order: real, imag, real, imag, ... `sample_type=iq` or in the order: imag, real, imag, real, ... `sample_type=qi`. Finally, if the data is stored as shorts `item_type=short`, then it may be stored in either big-endian `big_endian_items=true` or little-endian `big_endian_items=false`. If the shorts are big-endian then the 2nd byte in each short is output first. The output data type is either `float` or `gr_complex` depending on whether or not `sample_type` is real. Example: ``` ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Two_Bit_Packed_File_Signal_Source SignalSource.filename=/data/my_capture.datz SignalSource.item_type=short SignalSource.sampling_frequency=60000000 SignalSource.freq=1575468750 SignalSource.samples=6000000000 ; Notice that 0 indicates the entire file. SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_throttle_control=false SignalSource.sample_type=iq SignalSource.big_endian_items=true SignalSource.big_endian_bytes=false ``` **_Example: UHD Signal Source_** The user may prefer to use a [UHD](https://files.ettus.com/manual/)-compatible RF front-end and try real-time processing. For instance, for a USRP1 + DBSRX daughterboard, use: ``` ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=4000000 ; Sampling frequency in [Hz] SignalSource.freq=1575420000 ; RF front-end center frequency in [Hz] SignalSource.gain=60 ; Front-end gain in dB SignalSource.subdevice=B:0 ; UHD subdevice specification (for USRP1 use A:0 or B:0, for USRP B210 use A:0) ``` **_Example: Configuring the USRP X300/X310 with two front-ends for receiving signals in L1 and L2 bands_** ``` ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.device_address=192.168.40.2 ; Put your USRP IP address here SignalSource.item_type=gr_complex SignalSource.RF_channels=2 SignalSource.sampling_frequency=4000000 SignalSource.subdevice=A:0 B:0 ;######### RF Channels specific settings ###### SignalSource.freq0=1575420000 SignalSource.gain0=50 SignalSource.samples0=0 SignalSource.dump0=false SignalSource.freq1=1227600000 SignalSource.gain1=50 SignalSource.samples1=0 SignalSource.dump1=false ``` **_Example: OsmoSDR-compatible Signal Source_** [OsmoSDR](https://osmocom.org/projects/sdr) is a small form-factor, inexpensive software defined radio project. It provides a driver for several front-ends, such as [RTL-based dongles](https://www.rtl-sdr.com/tag/v3/), [HackRF](https://greatscottgadgets.com/hackrf/), [bladeRF](https://www.nuand.com/), [LimeSDR](https://myriadrf.org/projects/limesdr/), [etc](https://github.com/osmocom/gr-osmosdr/blob/master/README). Note that not all the OsmoSDR-compatible devices can work as radio frequency front-ends for proper GNSS signal reception, please check the specifications. For suitable RF front-ends, you can use: ``` ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Osmosdr_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=2000000 SignalSource.freq=1575420000 SignalSource.rf_gain=40 SignalSource.if_gain=30 SignalSource.enable_throttle_control=false SignalSource.osmosdr_args=hackrf,bias=1 ``` For [RTL-SDR Blog V3](https://www.rtl-sdr.com/tag/v3/) dongles, the arguments are: ``` SignalSource.osmosdr_args=rtl,bias=1 ``` and for [LimeSDR](https://myriadrf.org/projects/limesdr/): ``` SignalSource.osmosdr_args=driver=lime,soapy=0 ``` In case of using a Zarlink's RTL2832 based DVB-T receiver, you can even use the `rtl_tcp` I/Q server in order to use the USB dongle remotely. In a terminal, type: ``` $ rtl_tcp -a 127.0.0.1 -p 1234 -f 1575420000 -g 0 -s 2000000 ``` and use the following configuration: ``` ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=RtlTcp_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=1200000 SignalSource.freq=1575420000 SignalSource.gain=40 SignalSource.rf_gain=40 SignalSource.if_gain=30 SignalSource.AGC_enabled=false SignalSource.samples=0 SignalSource.enable_throttle_control=false SignalSource.address=127.0.0.1 SignalSource.port=1234 SignalSource.swap_iq=false SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ``` Example for a dual-frequency receiver: ``` ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.device_address=192.168.40.2 ; Put your USRP IP address here SignalSource.item_type=gr_complex SignalSource.RF_channels=2 SignalSource.sampling_frequency=4000000 SignalSource.subdevice=A:0 B:0 ;######### RF Channels specific settings ###### SignalSource.freq0=1575420000 SignalSource.gain0=50 SignalSource.samples0=0 SignalSource.dump0=false SignalSource.freq1=1227600000 SignalSource.gain1=50 SignalSource.samples1=0 SignalSource.dump1=false ``` More documentation and examples are available at the [Signal Source Blocks page](https://gnss-sdr.org/docs/sp-blocks/signal-source/). ### Signal Conditioner ![](./docs/doxygen/images/SignalConditioner.png) The signal conditioner is in charge of resampling the signal and delivering a reference sample rate to the downstream processing blocks, acting as a facade between the signal source and the synchronization channels, providing a simplified interface to the input signal. In the case of multiband front-ends, this module would be in charge of providing a separated data stream for each band. If your signal source is providing baseband signal samples of type `gr_complex` at 4 Msps, you can bypass the Signal Conditioner block by: ``` SignalConditioner.implementation=Pass_Through ``` If you need to adapt some aspect of your signal, you can enable the Signal Conditioner and configure three internal blocks: a data type adapter, an input signal, and a resampler. ``` ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ``` More documentation at the [Signal Conditioner Blocks page](https://gnss-sdr.org/docs/sp-blocks/signal-conditioner/). #### Data type adapter This block changes the type of input data samples. If your signal source delivers data samples of type `short`, you can use this block to convert them to `gr_complex` like this: ``` ;######### DATA_TYPE_ADAPTER CONFIG ############ ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Ishort_To_Complex ``` More documentation at the [Data Type Adapter Blocks page](https://gnss-sdr.org/docs/sp-blocks/data-type-adapter/). #### Input filter This block filters the input data. It can be combined with frequency translation for IF signals. The computation of the filter taps is based on parameters of GNU Radio's function [pm_remez](https://www.gnuradio.org/doc/doxygen/pm__remez_8h.html), which calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, the desired response on those bands, and the weight given to the error in those bands. The block can be configured like this: ``` ;######### INPUT_FILTER CONFIG ############ ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false ; #dump: Dump the filtered data to a file. InputFilter.dump_filename=./input_filter.dat ; #dump_filename: Log path and filename. InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 ; #number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_bands=2 ; #number_of_bands: Number of frequency bands in the filter. ; Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ; The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 InputFilter.decimation_factor=1 ``` More documentation at the [Input Filter Blocks page](https://gnss-sdr.org/docs/sp-blocks/input-filter/). #### Resampler This block resamples the input data stream. The `Direct_Resampler` block implements a nearest neighbourhood interpolation: ``` ;######### RESAMPLER CONFIG ############ ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block Resampler.implementation=Direct_Resampler Resampler.dump=false ; Dumps the resampled data to a file. Resampler.dump_filename=./resampler.dat ; log path and filename. Resampler.item_type=gr_complex Resampler.sample_freq_in=8000000 ; sample frequency of the input signal Resampler.sample_freq_out=4000000 ; desired sample frequency of the output signal ``` More documentation at the [Resampler Blocks page](https://gnss-sdr.org/docs/sp-blocks/resampler/). ### Channel A channel encapsulates all signal processing devoted to a single satellite. Thus, it is a large composite object which encapsulates the acquisition, tracking, and navigation data decoding modules. As a composite object, it can be treated as a single entity, meaning that it can be easily replicated. Since the number of channels is selectable by the user in the configuration file, this approach helps to improve the scalability and maintainability of the receiver. Each channel must be assigned to a GNSS signal, according to the following identifiers: | **Signal** | **Identifier** | | :------------- | :------------: | | GPS L1 C/A | 1C | | Galileo E1b/c | 1B | | Glonass L1 C/A | 1G | | Beidou B1I | B1 | | Galileo E6B | E6 | | Beidou B3I | B3 | | GPS L2 L2C(M) | 2S | | Glonass L2 C/A | 2G | | GPS L5 | L5 | | Galileo E5a | 5X | | Galileo E5b | 7X | Example: Eight GPS L1 C/A channels. ``` ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 ; Number of available GPS L1 C/A channels. Channels_1B.count=0 ; Number of available Galileo E1B channels. Channels.in_acquisition=1 ; Number of channels simultaneously acquiring Channel.signal=1C ; ``` Example: Four GPS L1 C/A and four Galileo E1B channels. ``` ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=4 ; Number of available GPS L1 C/A channels. Channels_1B.count=4 ; Number of available Galileo E1B channels. Channels.in_acquisition=1 ; Number of channels simultaneously acquiring Channel0.signal=1C ; Channel1.signal=1C ; Channel2.signal=1C ; Channel3.signal=1C ; Channel4.signal=1B ; Channel5.signal=1B ; Channel6.signal=1B ; Channel7.signal=1B ; ``` This module is also in charge of managing the interplay between acquisition and tracking. Acquisition can be initialized in several ways, depending on the prior information available (called cold start when the receiver has no information about its position nor the satellites' almanac; warm start when a rough location and the approximate time of day are available, and the receiver has a recently recorded almanac broadcast; or hot start when the receiver was tracking a satellite and the signal line of sight broke for a short period of time, but the ephemeris and almanac data is still valid, or this information is provided by other means), and an acquisition process can finish deciding that the satellite is not present, that longer integration is needed in order to confirm the presence of the satellite, or declaring the satellite present. In the latter case, the acquisition process should stop and trigger the tracking module with coarse estimations of the synchronization parameters. The mathematical abstraction used to design this logic is known as a finite state machine (FSM), which is a behavior model composed of a finite number of states, transitions between those states, and actions. The abstract class [ChannelInterface](./src/core/interfaces/channel_interface.h) represents an interface to a channel GNSS block. Check [Channel](./src/algorithms/channel/adapters/channel.h) for an actual implementation. More documentation at the [Channels page](https://gnss-sdr.org/docs/sp-blocks/channels/). #### Acquisition The first task of a GNSS receiver is to detect the presence or absence of in-view satellites. This is done by the acquisition system process, which also provides a coarse estimation of two signal parameters: the frequency shift with respect to the nominal frequency, and a delay term that allows the receiver to create a local code aligned with the incoming code. [AcquisitionInterface](./src/core/interfaces/acquisition_interface.h) is the common interface for all the acquisition algorithms and their corresponding implementations. Algorithms' interface, which may vary depending on the use of information external to the receiver, such as in Assisted GNSS, is defined in classes referred to as _adapters_. These adapters wrap the GNU Radio blocks interface into a compatible interface expected by AcquisitionInterface. This allows the use of existing GNU Radio blocks derived from `gr::block`, and ensures that newly developed implementations will also be reusable in other GNU Radio-based applications. Moreover, it adds still another layer of abstraction, since each given acquisition algorithm can have different implementations (for instance using different numerical libraries). In such a way, implementations can be continuously improved without having any impact neither on the algorithm interface nor the general acquisition interface. Check [GpsL1CaPcpsAcquisition](./src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.h) and [GalileoE1PcpsAmbiguousAcquisition](./src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.h) for examples of adapters from a Parallel Code Phase Search (PCPS) acquisition block, and [pcps_acquisition_cc](./src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.h) for an example of a block implementation. The source code of all the available acquisition algorithms is located at: ``` |-gnss-sdr |---src |-----algorithms |-------acquisition |---------adapters <- Adapters of the processing blocks to an AcquisitionInterface |---------gnuradio_blocks <- Signal processing blocks implementation ``` The user can select a given implementation for the algorithm to be used in each receiver channel, as well as their parameters, in the configuration file. For a GPS L1 C/A receiver: ``` ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ; Acquisition algorithm selection for this channel Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 ; Signal block duration for the acquisition signal detection [ms] Acquisition_1C.threshold=2.5 ; Acquisition threshold Acquisition_1C.pfa=0.01 ; Acquisition false alarm probability. This option overrides the threshold option. Acquisition_1C.doppler_max=10000 ; Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_step=500 ; Doppler step in the grid search [Hz] Acquisition_1C.dump=false ; Enables internal data file logging [true] or [false] Acquisition_1C.dump_filename=./acq_dump.dat ; Log path and filename ``` and, for Galileo E1B channels: ``` ;######### GALILEO ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 Acquisition_1B.pfa=0.008 Acquisition_1B.doppler_max=15000 Acquisition_1B.doppler_step=125 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ``` More documentation at the [Acquisition Blocks page](https://gnss-sdr.org/docs/sp-blocks/acquisition/). #### Tracking When a satellite is declared present, the parameters estimated by the acquisition module are then fed to the receiver tracking module, which represents the second stage of the signal processing unit, aiming to perform a local search for accurate estimates of code delay and carrier phase, and following their eventual variations. Again, a class hierarchy consisting of a [TrackingInterface](./src/core/interfaces/tracking_interface.h) class and subclasses implementing algorithms provides a way of testing different approaches, with full access to their parameters. Check [GpsL1CaDllPllTracking](./src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.h) or [GalileoE1DllPllVemlTracking](./src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.h) for examples of adapters, and [Gps_L1_Ca_Dll_Pll_Tracking_cc](./src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.h) for an example of a signal processing block implementation. There are also available some useful classes and functions for signal tracking; take a look at [cpu_multicorrelator.h](./src/algorithms/tracking/libs/cpu_multicorrelator.h), [lock_detectors.h](./src/algorithms/tracking/libs/lock_detectors.h), [tracking_discriminators.h](./src/algorithms/tracking/libs/tracking_discriminators.h) or [tracking_2nd_DLL_filter.h](./src/algorithms/tracking/libs/tracking_2nd_DLL_filter.h). The source code of all the available tracking algorithms is located at: ``` |-gnss-sdr |---src |-----algorithms |-------tracking |---------adapters <- Adapters of the processing blocks to a TrackingInterface |---------gnuradio_blocks <- Signal processing blocks implementation |---------libs <- libraries of tracking objects (e.g. correlators, discriminators, and so on) ``` The user can select a given implementation for the algorithm to be used in all the tracking blocks, as well as its parameters, in the configuration file. For instance, for GPS l1 channels: ``` ;######### TRACKING GPS L1 CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=50.0 ; PLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=2.0 ; DLL loop filter bandwidth [Hz] Tracking_1C.pll_filter_order=3 ; PLL loop filter order [2] or [3] Tracking_1C.dll_filter_order=2 ; DLL loop filter order [1], [2] or [3] Tracking_1C.early_late_space_chips=0.5 ; correlator early-late space [chips]. Tracking_1C.dump=false ; Enable internal binary data file logging [true] or [false] Tracking_1C.dump_filename=./tracking_ch_ ; Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. ``` and, for Galileo E1B channels: ``` ;######### TRACKING GALILEO E1B CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=15.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.pll_filter_order=3 ; PLL loop filter order [2] or [3] Tracking_1B.dll_filter_order=2 ; DLL loop filter order [1], [2] or [3] Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ``` More documentation at the [Tracking Blocks page](https://gnss-sdr.org/docs/sp-blocks/tracking/). #### Decoding of the navigation message Most of GNSS signal links are modulated by a navigation message containing the time the message was transmitted, orbital parameters of satellites (also known as ephemeris), and an almanac (information about the general system health, rough orbits of all satellites in the network as well as data related to error correction). Navigation data bits are structured in words, pages, subframes, frames, and superframes. Sometimes, bits corresponding to a single parameter are spread over different words, and values extracted from different frames are required for proper decoding. Some words are for synchronization purposes, others for error control, and others contain actual information. There are also error control mechanisms, from parity checks to forward error correction (FEC) encoding and interleaving, depending on the system. All this decoding complexity is managed by a finite state machine. The common interface is [TelemetryDecoderInterface](./src/core/interfaces/telemetry_decoder_interface.h). Check [GpsL1CaTelemetryDecoder](./src/algorithms/telemetry_decoder/adapters/gps_l1_ca_telemetry_decoder.h) for an example of the GPS L1 NAV message decoding adapter, and [gps_l1_ca_telemetry_decoder_cc](./src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h) for an actual implementation of a signal processing block. Configuration example: ``` ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ``` In case you are configuring a multi-system receiver, you will need to decimate the one with the fastest code rate in order to get both data streams synchronized. For instance, for hybrid GPS L1 / Galileo E1B receivers: ``` ;######### TELEMETRY DECODER GPS L1 CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GALILEO E1B CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ``` More documentation at the [Telemetry Decoder Blocks page](https://gnss-sdr.org/docs/sp-blocks/telemetry-decoder/). ### Observables GNSS systems provide different kinds of observations. The most commonly used are the code observations, also called pseudoranges. The _pseudo_ comes from the fact that on the receiver side the clock error is unknown and thus the measurement is not a pure range observation. High-accuracy applications also use the carrier phase observations, which are based on measuring the difference between the carrier phase transmitted by the GNSS satellites and the phase of the carrier generated in the receiver. Both observables are computed from the outputs of the tracking module and the decoding of the navigation message. This module collects all the data provided by every tracked channel, aligns all received data into a coherent set, and computes the observables. The common interface is [ObservablesInterface](./src/core/interfaces/observables_interface.h). Configuration example: ``` ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ``` More documentation at the [Observables Blocks page](https://gnss-sdr.org/docs/sp-blocks/observables/). ### Computation of Position, Velocity, and Time Although data processing for obtaining high-accuracy PVT solutions is out of the scope of GNSS-SDR, we provide a module that can compute position fixes (stored in GIS-friendly formats such as [GeoJSON](https://tools.ietf.org/html/rfc7946), [GPX](https://www.topografix.com/gpx.asp), and [KML](https://www.opengeospatial.org/standards/kml), or transmitted via serial port as [NMEA 0183](https://en.wikipedia.org/wiki/NMEA_0183) messages), and leaves room for more sophisticated positioning methods by storing observables and navigation data in [RINEX](https://en.wikipedia.org/wiki/RINEX) files (v2.11 or v3.02), and generating [RTCM](https://www.rtcm.org/ "Radio Technical Commission for Maritime Services") 3.2 messages that can be disseminated through the Internet in real-time. The common interface is [PvtInterface](./src/core/interfaces/pvt_interface.h). Configuration example: ``` ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen PVT.rinex_version=2 ; options: 2 or 3 PVT.output_rate_ms=100 ; Period in [ms] between two PVT outputs PVT.display_rate_ms=500 ; Position console print (std::out) interval [ms]. PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea ; NMEA log path and filename PVT.flag_nmea_tty_port=false ; Enables the NMEA log to a serial TTY port PVT.nmea_dump_devname=/dev/pts/4 ; serial device descriptor for NMEA logging PVT.flag_rtcm_server=true ; Enables or disables a TCP/IP server dispatching RTCM messages PVT.flag_rtcm_tty_port=false ; Enables the RTCM log to a serial TTY port PVT.rtcm_dump_devname=/dev/pts/1 ; serial device descriptor for RTCM logging PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1045_rate_ms=5000 PVT.rtcm_MT1097_rate_ms=1000 PVT.rtcm_MT1077_rate_ms=1000 ``` **Notes on the output formats:** - **GeoJSON** is a geospatial data interchange format based on JavaScript Object Notation (JSON) supported by numerous mapping and GIS software packages, including [OpenLayers](https://openlayers.org), [Leaflet](https://leafletjs.com), [MapServer](https://mapserver.org/), [GeoServer](https://geoserver.org/), [GeoDjango](https://www.djangoproject.com), [GDAL](https://gdal.org/), and [CartoDB](https://cartodb.com). It is also possible to use GeoJSON with [PostGIS](https://postgis.net/) and [Mapnik](https://mapnik.org/), both of which handle the format via the GDAL OGR conversion library. The [Google Maps Javascript API](https://developers.google.com/maps/documentation/javascript/) v3 directly supports the [integration of GeoJSON data layers](https://developers.google.com/maps/documentation/javascript/examples/layer-data-simple), and [GitHub also supports GeoJSON rendering](https://github.com/blog/1528-there-s-a-map-for-that). - **KML** (Keyhole Markup Language) is an XML grammar used to encode and transport representations of geographic data for display in an earth browser. KML is an open standard officially named the OpenGIS KML Encoding Standard (OGC KML), and it is maintained by the Open Geospatial Consortium, Inc. (OGC). KML files can be displayed in geobrowsers such as [Google Earth](https://www.google.com/earth/), [Marble](https://marble.kde.org), [osgEarth](https://github.com/gwaldron/osgearth), or used with the [NASA World Wind SDK for Java](https://worldwind.arc.nasa.gov/java/). - **GPX** (the GPS Exchange Format) is a lightweight XML data format for the interchange of GPS data (waypoints, routes, and tracks) between applications and Web services on the Internet. The format is open and can be used without the need to pay license fees, and it is supported by a [large list of software tools](https://www.topografix.com/gpx_resources.asp). - **NMEA 0183** is a combined electrical and data specification for communication between marine electronics such as echo sounder, sonars, anemometer, gyrocompass, autopilot, GPS receivers, and many other types of instruments. It has been defined by, and is controlled by, the U.S. [National Marine Electronics Association](https://www.nmea.org/). The NMEA 0183 standard uses a simple ASCII, serial communications protocol that defines how data are transmitted in a _sentence_ from one _talker_ to multiple _listeners_ at a time. Through the use of intermediate expanders, a talker can have a unidirectional conversation with a nearly unlimited number of listeners, and using multiplexers, multiple sensors can talk to a single computer port. At the application layer, the standard also defines the contents of each sentence (message) type, so that all listeners can parse messages accurately. Those messages can be sent through the serial port (that could be for instance a Bluetooth link) and be used/displayed by a number of software applications such as [gpsd](https://gpsd.gitlab.io/gpsd/index.html "The UNIX GPS daemon"), [JOSM](https://josm.openstreetmap.de/ "The Java OpenStreetMap Editor"), [OpenCPN](https://opencpn.org/ "Open Chart Plotter Navigator"), and many others (and maybe running on other devices). - **RINEX** (Receiver Independent Exchange Format) is an interchange format for raw satellite navigation system data, covering observables and the information contained in the navigation message broadcast by GNSS satellites. This allows the user to post-process the received data to produce a more accurate result (usually with other data unknown to the original receiver, such as better models of the atmospheric conditions at time of measurement). RINEX files can be used by software packages such as [GNSSTK](https://github.com/SGL-UT/gnsstk), [RTKLIB](https://www.rtklib.com/), and [gLAB](https://gage.upc.edu/en/learning-materials/software-tools/glab-tool-suite). GNSS-SDR by default generates RINEX version [3.02](ftp://igs.org/pub/data/format/rinex302.pdf). If [2.11](ftp://igs.org/pub/data/format/rinex211.txt) is needed, it can be requested through the `rinex_version` parameter in the configuration file: ``` PVT.rinex_version=2 ``` - **RTCM SC-104** provides standards that define the data structure for differential GNSS correction information for a variety of differential correction applications. Developed by the Radio Technical Commission for Maritime Services ([RTCM](https://www.rtcm.org/ "Radio Technical Commission for Maritime Services")), they have become an industry standard for the communication of correction information. GNSS-SDR implements RTCM version 3.2, defined in the document _RTCM 10403.2, Differential GNSS (Global Navigation Satellite Systems) Services - Version 3_ (February 1, 2013), which can be [purchased online](https://ssl29.pair.com/dmarkle/puborder.php?show=3 "RTCM Online Publication Order Form"). By default, the generated RTCM binary messages are dumped into a text file in hexadecimal format. However, GNSS-SDR is equipped with a TCP/IP server, acting as an NTRIP source that can feed an NTRIP server. NTRIP (Networked Transport of RTCM via Internet Protocol) is an open standard protocol that can be freely downloaded from [BKG](https://igs.bkg.bund.de/root_ftp/NTRIP/documentation/NtripDocumentation.pdf "Networked Transport of RTCM via Internet Protocol (Ntrip) Version 1.0"), and it is designed for disseminating differential correction data (_e.g._ in the RTCM-104 format) or other kinds of GNSS streaming data to stationary or mobile users over the Internet. The TCP/IP server can be enabled by setting `PVT.flag_rtcm_server=true` in the configuration file, and will be active during the execution of the software receiver. By default, the server will operate on port 2101 (which is the recommended port for RTCM services according to the Internet Assigned Numbers Authority, [IANA](https://www.iana.org/assignments/service-names-port-numbers/ "Service Name and Transport Protocol Port Number Registry")), and will identify the Reference Station with ID=1234. This behavior can be changed in the configuration file: ``` PVT.flag_rtcm_server=true PVT.rtcm_tcp_port=2102 PVT.rtcm_station_id=1111 ``` **Important note:** In order to get well-formatted GeoJSON, KML, and RINEX files, always terminate `gnss-sdr` execution by pressing key `q` and then key `ENTER`. Those files will be automatically deleted if no position fix has been obtained during the execution of the software receiver. More documentation at the [PVT Blocks page](https://gnss-sdr.org/docs/sp-blocks/pvt/). # About the software license GNSS-SDR is released under the [General Public License (GPL) v3](https://www.gnu.org/licenses/gpl.html), thus securing practical usability, inspection, and continuous improvement by the research community, allowing the discussion based on tangible code and the analysis of results obtained with real signals. The GPL implies that: 1. Copies may be distributed free of charge or for money, but the source code has to be shipped or provided free of charge (or at cost price) on demand. The receiver of the source code has the same rights meaning he can share copies free of charge or resell. 2. The licensed material may be analyzed or modified. 3. Modified material may be distributed under the same licensing terms but _do not_ have to be distributed. That means that modifications only have to be made available to the public if distribution happens. So it is perfectly fine to take the GNSS-SDR source code, modify it heavily and use it in a not distributed application / library. This is how companies like Google can run their own patched versions of Linux for example. But what this also means is that non-GPL code cannot use GPL code. This means that you cannot modify / use GNSS-SDR, blend it with non-GPL code, and make money with the resulting software. You cannot distribute the resulting software under a non-disclosure agreement or contract. Distributors under the GPL also grant a license for any of their patents practiced by the software, to practice those patents in GPL software. You can sell a device that runs with GNSS-SDR, but if you distribute the code, it has to remain under GPL. # Publications and Credits If you use GNSS-SDR to produce a research paper or Thesis, we would appreciate if you reference the following article to credit the GNSS-SDR project: - C. Fernández-Prades, J. Arribas, P. Closas, C. Avilés, and L. Esteve, [GNSS-SDR: an open source tool for researchers and developers](https://www.researchgate.net/publication/233380791_GNSS-SDR_An_open_source_tool_for_researchers_and_developers), in Proceedings of the 24th International Technical Meeting of The Satellite Division of the Institute of Navigation (ION GNSS), Portland, Oregon, Sept. 19-23, 2011, pp. 780-794. For LaTeX users, this is the BibTeX entry for your convenience: ``` @INPROCEEDINGS{GNSS-SDR11, AUTHOR = {C.~{Fern\'{a}ndez--Prades} and J.~Arribas and P.~Closas and C.~Avil\'{e}s and L.~Esteve}, TITLE = {{GNSS-SDR}: An Open Source Tool For Researchers and Developers}, BOOKTITLE = {Proc. 24th Intl. Tech. Meeting Sat. Div. Inst. Navig.}, YEAR = {2011}, PAGES = {780--794}, ADDRESS = {Portland, Oregon}, MONTH = {Sept.} } ``` There is a list of papers related to GNSS-SDR in our [publications page](https://gnss-sdr.org/publications/ "Publications"). # Ok, now what? In order to start using GNSS-SDR, you may want to populate `gnss-sdr/data` folder (or anywhere else on your system) with raw data files. By "raw data" we mean the output of a Radio Frequency front-end's Analog-to-Digital converter. GNSS-SDR needs signal samples already in baseband or in passband, at a suitable intermediate frequency (on the order of MHz). Prepare your configuration file, and then you are ready for running `gnss-sdr --config_file=your_configuration.conf`, and seeing how the file is processed. Another interesting option is working in real-time with an RF front-end. We provide drivers for UHD-compatible hardware such as the [USRP family](https://www.ettus.com/product), for OsmoSDR and other front-ends (HackRF, bladeRF, LimeSDR, and for some DVB-T USB dongles). Start with a low number of channels and then increase it in order to test how many channels your processor can handle in real-time. You can find more information at the [GNSS-SDR Documentation page](https://gnss-sdr.org/docs/) or directly asking to the [GNSS-SDR Developers mailing list](https://lists.sourceforge.net/lists/listinfo/gnss-sdr-developers). You are also very welcome to contribute to the project, there are many ways to [participate in GNSS-SDR](https://gnss-sdr.org/contribute/). If you need some special feature not yet implemented, the Developer Team would love to be hired for developing it. Please do not hesitate to [contact them](https://gnss-sdr.org/team/). **Enjoy GNSS-SDR!** The Developer Team. gnss-sdr-0.0.20/cmake/000077500000000000000000000000001477325711200144225ustar00rootroot00000000000000gnss-sdr-0.0.20/cmake/Modules/000077500000000000000000000000001477325711200160325ustar00rootroot00000000000000gnss-sdr-0.0.20/cmake/Modules/AvoidAccelerate.cmake000066400000000000000000000033371477325711200220550ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # Avoid using the BLAS and LAPACK implementations that comes with the Accelerate # framework, which causes a bug when the BeiDou constellation is enabled if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() if(NOT BLAS_ROOT) set(BLAS_ROOT_USER_DEFINED /usr/local/lib) else() set(BLAS_ROOT_USER_DEFINED ${BLAS_ROOT}) endif() if(DEFINED ENV{BLAS_ROOT}) set(BLAS_ROOT_USER_DEFINED ${BLAS_ROOT_USER_DEFINED} $ENV{BLAS_ROOT} ) endif() find_library(BLAS_LIBRARIES NAMES libblas.dylib libopenblas.dylib PATHS ${BLAS_ROOT_USER_DEFINED} ${BLAS_ROOT_USER_DEFINED}/lapack ${GNSSSDR_LIB_PATHS}/lapack ${GNSSSDR_LIB_PATHS} /usr/local/opt/lapack/lib /opt/homebrew/opt/lapack/lib NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH ) if(BLAS_LIBRARIES) set(BLAS_FOUND TRUE) message(STATUS "BLAS library found at ${BLAS_LIBRARIES}") endif() find_library(LAPACK_LIBRARIES liblapack.dylib PATHS ${BLAS_ROOT_USER_DEFINED} ${BLAS_ROOT_USER_DEFINED}/lapack ${GNSSSDR_LIB_PATHS}/lapack /usr/local/opt/lapack/lib /opt/homebrew/opt/lapack/lib NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH ) if(LAPACK_LIBRARIES) set(LAPACK_FOUND TRUE) message(STATUS "LAPACK library found at ${LAPACK_LIBRARIES}") endif() gnss-sdr-0.0.20/cmake/Modules/BuildProtobuf.cmake000066400000000000000000000201071477325711200216140ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2023-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # Downloads and builds the protoc compiler and static libraries of Protocol # Buffers >= v22.0 (see https://protobuf.dev/) It requires CMake >= 3.10 and the # abseil-cpp >= 20230117 libraries (see https://github.com/abseil/abseil-cpp) # already installed. Zlib is used if found. # # Creates protobuf::libprotobuf and protobuf::protoc imported targets. if(NOT GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION) set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "30.2") endif() if(NOT GNSSSDR_BINARY_DIR) set(GNSSSDR_BINARY_DIR "${PROJECT_BINARY_DIR}") endif() if(NOT ZLIB_FOUND) find_package(ZLIB) set_package_properties(ZLIB PROPERTIES URL "https://www.zlib.net/" PURPOSE "Required to build Protocol Buffers." TYPE REQUIRED ) if(ZLIB_FOUND AND ZLIB_VERSION_STRING) set_package_properties(ZLIB PROPERTIES DESCRIPTION "A Massively Spiffy Yet Delicately Unobtrusive Compression Library (found: v${ZLIB_VERSION_STRING})" ) else() set_package_properties(ZLIB PROPERTIES DESCRIPTION "A Massively Spiffy Yet Delicately Unobtrusive Compression Library" ) endif() if(ZLIB_FOUND) set(ZLIB_LIBRARIES_ ${ZLIB_LIBRARIES}) set(USE_ZLIB -Dprotobuf_WITH_ZLIB=ON) else() set(ZLIB_LIBRARIES_ "") set(USE_ZLIB -Dprotobuf_WITH_ZLIB=OFF) endif() else() set(ZLIB_LIBRARIES_ ${ZLIB_LIBRARIES}) set(USE_ZLIB -Dprotobuf_WITH_ZLIB=ON) endif() include(GNUInstallDirs) list(APPEND UTF8_LIBRARIES ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}utf8_validity${CMAKE_STATIC_LIBRARY_SUFFIX} ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}utf8_range${CMAKE_STATIC_LIBRARY_SUFFIX} ) set(ABSL_OPTION "") if(CMAKE_VERSION VERSION_LESS "3.16" OR GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION VERSION_LESS "30.0") set(ABSL_OPTION "-Dprotobuf_ABSL_PROVIDER=package") endif() ExternalProject_Add(protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} PREFIX ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} GIT_REPOSITORY https://github.com/protocolbuffers/protobuf GIT_TAG v${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} GIT_PROGRESS ON UPDATE_COMMAND "" PATCH_COMMAND ${PROTOBUF_PATCH_COMMAND} SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/protobuf/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} BINARY_DIR ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> -DCMAKE_CXX_VISIBILITY_PRESET=hidden -DCMAKE_VISIBILITY_INLINES_HIDDEN=1 -DCMAKE_INSTALL_PREFIX=${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION} -Dprotobuf_BUILD_TESTS=OFF ${ABSL_OPTION} ${USE_ZLIB} BUILD_COMMAND ${CMAKE_COMMAND} "--build" "${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}" "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> "--target" install BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}protobuf$<$:d>${CMAKE_STATIC_LIBRARY_SUFFIX} ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/bin/protoc ${ABSL_LIBRARIES} ${UTF8_LIBRARIES} INSTALL_COMMAND "" ) file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/include) file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/${CMAKE_INSTALL_LIBDIR}) if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") find_library(CoreFoundation CoreFoundation) else() set(CoreFoundation "") endif() set(PROTOBUF_ABSL_USED_TARGETS absl::absl_check absl::absl_log absl::algorithm absl::base absl::bind_front absl::bits absl::btree absl::cleanup absl::cord absl::core_headers absl::debugging absl::die_if_null absl::dynamic_annotations absl::flags absl::flat_hash_map absl::flat_hash_set absl::function_ref absl::hash absl::layout absl::log_initialize absl::log_severity absl::memory absl::node_hash_map absl::node_hash_set absl::optional absl::span absl::status absl::statusor absl::strings absl::synchronization absl::time absl::type_traits absl::utility absl::variant ) if(NOT TARGET protobuf::libprotobuf) add_library(protobuf::libprotobuf STATIC IMPORTED) add_dependencies(protobuf::libprotobuf protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}) set_target_properties(protobuf::libprotobuf PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_CONFIGURATIONS "None;Debug;Release;RelWithDebInfo;MinSizeRel" MAP_IMPORTED_CONFIG_NOOPTWITHASM Debug MAP_IMPORTED_CONFIG_COVERAGE Debug MAP_IMPORTED_CONFIG_O2WITHASM RelWithDebInfo MAP_IMPORTED_CONFIG_O3WITHASM RelWithDebInfo MAP_IMPORTED_CONFIG_ASAN Debug IMPORTED_LOCATION_NONE ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_DEBUG ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}protobufd${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELEASE ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_RELWITHDEBINFO ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX} IMPORTED_LOCATION_MINSIZEREL ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX} INTERFACE_INCLUDE_DIRECTORIES ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/include INTERFACE_LINK_LIBRARIES "${ZLIB_LIBRARIES_};${CoreFoundation};${UTF8_LIBRARIES};${PROTOBUF_ABSL_USED_TARGETS};${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}protobuf$<$:d>${CMAKE_STATIC_LIBRARY_SUFFIX}" ) endif() if(NOT TARGET protobuf::protoc) add_executable(protobuf::protoc IMPORTED) add_dependencies(protobuf::protoc protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}) unset(Protobuf_PROTOC_EXECUTABLE) set(PROTOBUF_PROTOC_EXECUTABLE "${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/bin/protoc") set_target_properties(protobuf::protoc PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/bin/protoc INTERFACE_LINK_LIBRARIES ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}protoc$<$:d>${CMAKE_STATIC_LIBRARY_SUFFIX} ) endif() gnss-sdr-0.0.20/cmake/Modules/DetectLinuxDistro.cmake000066400000000000000000000065011477325711200224530ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause if(CMAKE_VERSION VERSION_LESS 3.19) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(ARCHITECTURE_STRING "(64 bits)") else() set(ARCHITECTURE_STRING "(32 bits)") endif() else() set(ARCHITECTURE_STRING "(${CMAKE_HOST_SYSTEM_PROCESSOR})") endif() if(EXISTS "/etc/lsb-release") execute_process(COMMAND cat /etc/lsb-release COMMAND grep DISTRIB_ID COMMAND awk -F= "{ print $2 }" COMMAND tr "\n" " " COMMAND sed "s/ //" OUTPUT_VARIABLE LINUX_DISTRIBUTION RESULT_VARIABLE LINUX_ID_RESULT ) execute_process(COMMAND cat /etc/lsb-release COMMAND grep DISTRIB_RELEASE COMMAND awk -F= "{ print $2 }" COMMAND tr "\n" " " COMMAND sed "s/ //" OUTPUT_VARIABLE LINUX_VER RESULT_VARIABLE LINUX_VER_RESULT ) endif() if(NOT LINUX_DISTRIBUTION) if(EXISTS "/etc/linuxmint/info") set(LINUX_DISTRIBUTION "LinuxMint") execute_process(COMMAND cat /etc/linuxmint/info COMMAND grep -m1 RELEASE COMMAND awk -F= "{ print $2 }" COMMAND tr "\n" " " COMMAND sed "s/ //" OUTPUT_VARIABLE LINUX_VER RESULT_VARIABLE LINUX_VER_RESULT ) endif() endif() if(NOT LINUX_DISTRIBUTION) if(EXISTS "/etc/os-release") execute_process(COMMAND cat /etc/os-release COMMAND grep -m1 NAME COMMAND awk -F= "{ print $2 }" COMMAND tr "\n" " " COMMAND sed "s/ //" OUTPUT_VARIABLE LINUX_DISTRIBUTION_ RESULT_VARIABLE LINUX_ID_RESULT ) execute_process(COMMAND cat /etc/os-release COMMAND grep VERSION_ID COMMAND awk -F= "{ print $2 }" COMMAND tr "\n" " " COMMAND sed "s/ //" OUTPUT_VARIABLE LINUX_VER_ RESULT_VARIABLE LINUX_VER_RESULT ) if(LINUX_DISTRIBUTION_) string(REPLACE "\"" "" LINUX_DISTRIBUTION__ ${LINUX_DISTRIBUTION_}) string(STRIP ${LINUX_DISTRIBUTION__} LINUX_DISTRIBUTION) endif() if(LINUX_VER_) string(REPLACE "\"" "" LINUX_VER ${LINUX_VER_}) endif() if(${LINUX_DISTRIBUTION} MATCHES "Debian") set(LINUX_DISTRIBUTION "Debian") file(READ /etc/debian_version LINUX_VER_) string(REPLACE "\n" "" LINUX_VER ${LINUX_VER_}) endif() endif() endif() if(NOT LINUX_DISTRIBUTION) if(EXISTS "/etc/redhat-release") set(LINUX_DISTRIBUTION "Red Hat") file(READ /etc/redhat-release LINUX_VER_) string(REPLACE "\n" "" LINUX_VER ${LINUX_VER_}) endif() endif() if(NOT LINUX_DISTRIBUTION) if(EXISTS "/etc/debian_version") set(LINUX_DISTRIBUTION "Debian") file(READ /etc/debian_version LINUX_VER_) string(REPLACE "\n" "" LINUX_VER ${LINUX_VER_}) endif() endif() if(NOT LINUX_DISTRIBUTION) if(EXISTS "/etc/arch-release") set(LINUX_DISTRIBUTION "Arch Linux") set(LINUX_VER "") endif() endif() if(NOT LINUX_DISTRIBUTION) set(LINUX_DISTRIBUTION "Generic") set(LINUX_VER "Unknown") endif() gnss-sdr-0.0.20/cmake/Modules/DetectMacOSVersion.cmake000066400000000000000000000107151477325711200225010ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause execute_process(COMMAND uname -v OUTPUT_VARIABLE DARWIN_VERSION) string(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION}) if(${DARWIN_VERSION} VERSION_GREATER "19") execute_process(COMMAND awk "/SOFTWARE LICENSE AGREEMENT FOR macOS/" "/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf" OUTPUT_VARIABLE macOS_NAME) if(macOS_NAME) string(REGEX MATCH "macOS*([^\n\r]*)" macOS_NAME ${macOS_NAME}) string(REGEX REPLACE "macOS " "" macOS_NAME ${macOS_NAME}) string(REGEX REPLACE ".$" "" macOS_NAME ${macOS_NAME}) execute_process(COMMAND sw_vers -productVersion OUTPUT_VARIABLE macOS_VERSION) string(REGEX REPLACE "\n$" "" macOS_VERSION ${macOS_VERSION}) set(MACOS_DISTRIBUTION "macOS ${macOS_NAME} ${macOS_VERSION} (${CMAKE_SYSTEM_PROCESSOR})") endif() endif() if(${DARWIN_VERSION} MATCHES "19") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++17") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") set(MACOS_DISTRIBUTION "macOS Catalina 10.15") endif() if(${DARWIN_VERSION} MATCHES "18") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") set(MACOS_DISTRIBUTION "macOS Mojave 10.14") endif() if(${DARWIN_VERSION} MATCHES "17") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") set(MACOS_DISTRIBUTION "macOS High Sierra 10.13") endif() if(${DARWIN_VERSION} MATCHES "16") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") set(MACOS_DISTRIBUTION "macOS Sierra 10.12") endif() if(${DARWIN_VERSION} MATCHES "15") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") set(MACOS_DISTRIBUTION "Mac OS X 10.11 El Capitan") endif() if(${DARWIN_VERSION} MATCHES "14") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") set(MACOS_DISTRIBUTION "Mac OS X 10.10 Yosemite") endif() if(${DARWIN_VERSION} MATCHES "13") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION="com.apple.compilers.llvm.clang.1_0") set(MACOS_DISTRIBUTION "Mac OS X 10.9 Mavericks") endif() if(${DARWIN_VERSION} MATCHES "12") set(MACOS_DISTRIBUTION "Mac OS X 10.8 Mountain Lion") endif() if(${DARWIN_VERSION} MATCHES "11") set(MACOS_DISTRIBUTION "Mac OS X 10.7 Lion") endif() if(${DARWIN_VERSION} MATCHES "10") set(MACOS_DISTRIBUTION "Mac OS X 10.6 Snow Leopard") endif() if(NOT MACOS_DISTRIBUTION) set(MACOS_DISTRIBUTION "macOS (Unknown version)") endif() set(MACOS_PACKAGES_PREFIX "") # Detect if MacPorts is installed on this system; if so, return base path and version execute_process(COMMAND which port RESULT_VARIABLE DETECT_MACPORTS OUTPUT_VARIABLE MACPORTS_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if(${DETECT_MACPORTS} EQUAL 0) # "/opt/local/bin/port", so we get the parent directory get_filename_component(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY) # "/opt/local/bin", so we get the parent directory get_filename_component(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY) execute_process(COMMAND port version RESULT_VARIABLE DETECT_MACPORTS_VERSION OUTPUT_VARIABLE MACPORTS_VERSION ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" MACPORTS_VERSION "${MACPORTS_VERSION}") set(MACOS_PACKAGES_PREFIX ${MACPORTS_PREFIX}) endif() # Detect if Homebrew is installed on this system; if so, return base path and version execute_process(COMMAND brew --prefix RESULT_VARIABLE DETECT_HOMEBREW OUTPUT_VARIABLE HOMEBREW_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if(${DETECT_HOMEBREW} EQUAL 0) execute_process(COMMAND brew --version RESULT_VARIABLE DETECT_HOMEBREW_VERSION OUTPUT_VARIABLE HOMEBREW_VERSION ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" HOMEBREW_VERSION "${HOMEBREW_VERSION}") set(MACOS_PACKAGES_PREFIX ${HOMEBREW_PREFIX}) endif() gnss-sdr-0.0.20/cmake/Modules/FindCPUFEATURES.cmake000066400000000000000000000036561477325711200214350ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2021-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause set(FPHSA_NAME_MISMATCHED ON) if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() find_library(CPUFEATURES_LIBRARIES NAMES cpu_features PATHS ${GNSSSDR_LIB_PATHS} ) find_path(CPUFEATURES_INCLUDE_DIR cpu_features_macros.h PATHS $ENV{CPUFEATURES_DIR}/include $ENV{CPUFEATURES_DIR} ${GNSSSDR_INCLUDE_PATHS} PATH_SUFFIXES cpu_features ) if(CPUFEATURES_INCLUDE_DIR AND CPUFEATURES_LIBRARIES) if(NOT PACKAGE_VERSION) set(PACKAGE_VERSION "") endif() set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION}) unset(PACKAGE_VERSION) list(GET CPUFEATURES_LIBRARIES 0 FIRST_DIR) get_filename_component(CPUFEATURES_LIBRARIES_PATH ${FIRST_DIR} DIRECTORY) if(EXISTS ${CPUFEATURES_LIBRARIES_PATH}/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake) include(${CPUFEATURES_LIBRARIES_PATH}/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake) endif() if(PACKAGE_VERSION) set(CPUFEATURES_VERSION ${PACKAGE_VERSION}) else() set(CPUFEATURES_VERSION "Unknown") endif() set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION}) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(CPUFEATURES DEFAULT_MSG CPUFEATURES_LIBRARIES CPUFEATURES_INCLUDE_DIR ) if(CPUFEATURES_FOUND AND NOT TARGET CpuFeature::cpu_features) add_library(CpuFeature::cpu_features STATIC IMPORTED) set_target_properties(CpuFeature::cpu_features PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${CPUFEATURES_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${CPUFEATURES_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${CPUFEATURES_LIBRARIES}" ) endif() mark_as_advanced(CPUFEATURES_LIBRARIES) gnss-sdr-0.0.20/cmake/Modules/FindFILESYSTEM.cmake000066400000000000000000000211561477325711200213260ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # Original code from https://github.com/vector-of-bool/CMakeCM and modified # by C. Fernandez. The original code is distributed under the OSI-approved # BSD 3-Clause License. See https://cmake.org/licensing for details. #[=======================================================================[.rst: FindFILESYSTEM ############## This module supports the C++17 standard library's filesystem utilities. Use the :imp-target:`std::filesystem` imported target to Options ******* The ``COMPONENTS`` argument to this module supports the following values: .. find-component:: Experimental :name: fs.Experimental Allows the module to find the "experimental" Filesystem TS version of the Filesystem library. This is the library that should be used with the ``std::experimental::filesystem`` namespace. .. find-component:: Final :name: fs.Final Finds the final C++17 standard version of the filesystem library. If no components are provided, behaves as if the :find-component:`fs.Final` component was specified. If both :find-component:`fs.Experimental` and :find-component:`fs.Final` are provided, first looks for ``Final``, and falls back to ``Experimental`` in case of failure. If ``Final`` is found, :imp-target:`std::filesystem` and all :ref:`variables ` will refer to the ``Final`` version. Imported Targets **************** .. imp-target:: std::filesystem The ``std::filesystem`` imported target is defined when any requested version of the C++ filesystem library has been found, whether it is *Experimental* or *Final*. If no version of the filesystem library is available, this target will not be defined. .. note:: This target has ``cxx_std_17`` as an ``INTERFACE`` :ref:`compile language standard feature `. Linking to this target will automatically enable C++17 if no later standard version is already required on the linking target. .. _fs.variables: Variables ********* .. variable:: CXX_FILESYSTEM_IS_EXPERIMENTAL Set to ``TRUE`` when the :find-component:`fs.Experimental` version of C++ filesystem library was found, otherwise ``FALSE``. .. variable:: CXX_FILESYSTEM_HAVE_FS Set to ``TRUE`` when a filesystem header was found. .. variable:: CXX_FILESYSTEM_HEADER Set to either ``filesystem`` or ``experimental/filesystem`` depending on whether :find-component:`fs.Final` or :find-component:`fs.Experimental` was found. .. variable:: CXX_FILESYSTEM_NAMESPACE Set to either ``std::filesystem`` or ``std::experimental::filesystem`` depending on whether :find-component:`fs.Final` or :find-component:`fs.Experimental` was found. Examples ******** Using `find_package(FILESYSTEM)` with no component arguments: .. code-block:: cmake find_package(FILESYSTEM REQUIRED) add_executable(my-program main.cpp) target_link_libraries(my-program PRIVATE std::filesystem) #]=======================================================================] if(TARGET std::filesystem) # This module has already been processed. Don't do it again. return() endif() include(CMakePushCheckState) include(CheckIncludeFileCXX) include(CheckCXXSourceCompiles) cmake_push_check_state() if(FILESYSTEM_FIND_QUIETLY) set(CMAKE_REQUIRED_QUIET ${FILESYSTEM_FIND_QUIETLY}) endif() # All of our tests require C++17 or later set(OLD_CMAKE_CXX_STANDARD ${CMAKE_CXX_STANDARD}) set(CMAKE_CXX_STANDARD 17) if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "8.0.0")) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.99") set(UNDEFINED_BEHAVIOR_WITHOUT_LINKING TRUE) endif() set(CMAKE_REQUIRED_FLAGS "-std=c++17") endif() if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.99")) set(CMAKE_REQUIRED_FLAGS "-std=c++17") endif() if((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11")) set(CMAKE_REQUIRED_FLAGS "-std=c++17") endif() if(MSVC AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "18")) set(CMAKE_REQUIRED_FLAGS "/std:c++17") endif() # Normalize and check the component list we were given set(want_components ${FILESYSTEM_FIND_COMPONENTS}) if(FILESYSTEM_FIND_COMPONENTS STREQUAL "") set(want_components Final) endif() # Warn on any unrecognized components set(extra_components ${want_components}) list(REMOVE_ITEM extra_components Final Experimental) foreach(component IN LISTS extra_components) message(WARNING "Extraneous find_package component for FILESYSTEM: ${component}") endforeach() # Detect which of Experimental and Final we should look for set(find_experimental TRUE) set(find_final TRUE) if(NOT "Final" IN_LIST want_components) set(find_final FALSE) endif() if(NOT "Experimental" IN_LIST want_components) set(find_experimental FALSE) endif() if(find_final) check_include_file_cxx("filesystem" _CXX_FILESYSTEM_HAVE_HEADER) mark_as_advanced(_CXX_FILESYSTEM_HAVE_HEADER) if(_CXX_FILESYSTEM_HAVE_HEADER) # We found the non-experimental header. Don't bother looking for the # experimental one. set(find_experimental FALSE) endif() else() set(_CXX_FILESYSTEM_HAVE_HEADER FALSE) endif() if(find_experimental) check_include_file_cxx("experimental/filesystem" _CXX_FILESYSTEM_HAVE_EXPERIMENTAL_HEADER) mark_as_advanced(_CXX_FILESYSTEM_HAVE_EXPERIMENTAL_HEADER) else() set(_CXX_FILESYSTEM_HAVE_EXPERIMENTAL_HEADER FALSE) endif() if(_CXX_FILESYSTEM_HAVE_HEADER) set(_have_fs TRUE) set(_fs_header filesystem) set(_fs_namespace std::filesystem) elseif(_CXX_FILESYSTEM_HAVE_EXPERIMENTAL_HEADER) set(_have_fs TRUE) set(_fs_header experimental/filesystem) set(_fs_namespace std::experimental::filesystem) else() set(_have_fs FALSE) endif() set(CXX_FILESYSTEM_HAVE_FS ${_have_fs} CACHE BOOL "TRUE if we have the C++ filesystem headers") set(CXX_FILESYSTEM_HEADER ${_fs_header} CACHE STRING "The header that should be included to obtain the filesystem APIs") set(CXX_FILESYSTEM_NAMESPACE ${_fs_namespace} CACHE STRING "The C++ namespace that contains the filesystem APIs") set(_found FALSE) if(CXX_FILESYSTEM_HAVE_FS) # We have some filesystem library available. Do link checks string(CONFIGURE [[ #include <@CXX_FILESYSTEM_HEADER@> int main() { auto cwd = @CXX_FILESYSTEM_NAMESPACE@::current_path(); return static_cast(cwd.string().size()); } ]] code @ONLY) # Try to compile a simple filesystem program without any linker flags if(NOT UNDEFINED_BEHAVIOR_WITHOUT_LINKING) check_cxx_source_compiles("${code}" CXX_FILESYSTEM_NO_LINK_NEEDED) set(can_link ${CXX_FILESYSTEM_NO_LINK_NEEDED}) endif() if(NOT CXX_FILESYSTEM_NO_LINK_NEEDED) set(prev_libraries ${CMAKE_REQUIRED_LIBRARIES}) set(CMAKE_REQUIRED_FLAGS "-std=c++17") # Add the libstdc++ flag set(CMAKE_REQUIRED_LIBRARIES ${prev_libraries} -lstdc++fs) check_cxx_source_compiles("${code}" CXX_FILESYSTEM_STDCPPFS_NEEDED) set(can_link ${CXX_FILESYSTEM_STDCPPFS_NEEDED}) if(NOT CXX_FILESYSTEM_STDCPPFS_NEEDED) # Try the libc++ flag set(CMAKE_REQUIRED_LIBRARIES ${prev_libraries} -lc++fs) check_cxx_source_compiles("${code}" CXX_FILESYSTEM_CPPFS_NEEDED) set(can_link ${CXX_FILESYSTEM_CPPFS_NEEDED}) endif() endif() if(can_link) if(CMAKE_VERSION VERSION_LESS 3.12) add_library(std::filesystem INTERFACE IMPORTED GLOBAL) else() add_library(std::filesystem INTERFACE IMPORTED) target_compile_features(std::filesystem INTERFACE cxx_std_17) endif() set(_found TRUE) if(CXX_FILESYSTEM_NO_LINK_NEEDED) # Nothing to add... elseif(CXX_FILESYSTEM_STDCPPFS_NEEDED) target_link_libraries(std::filesystem INTERFACE -lstdc++fs) elseif(CXX_FILESYSTEM_CPPFS_NEEDED) target_link_libraries(std::filesystem INTERFACE -lc++fs) endif() endif() endif() if(NOT ${_found}) set(CMAKE_CXX_STANDARD ${OLD_CMAKE_CXX_STANDARD}) endif() cmake_pop_check_state() set(FILESYSTEM_FOUND ${_found}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(FILESYSTEM DEFAULT_MSG FILESYSTEM_FOUND) if(FILESYSTEM_FIND_REQUIRED AND NOT FILESYSTEM_FOUND) message(FATAL_ERROR "Cannot compile a simple program using std::filesystem") endif() gnss-sdr-0.0.20/cmake/Modules/FindGFLAGS.cmake000066400000000000000000000104111477325711200205750ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # - Try to find GFlags # # The following CMake and environment variables are optionally searched # for defaults: # GFLAGS_ROOT: Base directory where all GFlags components are found # # The following are set after configuration is done: # GFlags_FOUND # GFlags_INCLUDE_DIRS # GFlags_LIBS # GFlags_LIBRARY_DIRS # # Provides the following imported target: # Gflags::gflags # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() if(NOT GFLAGS_ROOT) set(GFLAGS_ROOT_USER_PROVIDED /usr/local) else() set(GFLAGS_ROOT_USER_PROVIDED ${GFLAGS_ROOT}) endif() if(DEFINED ENV{GFLAGS_ROOT}) set(GFLAGS_ROOT_USER_PROVIDED ${GFLAGS_ROOT_USER_PROVIDED} $ENV{GFLAGS_ROOT} ) endif() if(APPLE) find_path(GFlags_ROOT_DIR libgflags.dylib PATHS ${GFLAGS_ROOT_USER_PROVIDED}/lib ${GNSSSDR_LIB_PATHS} ${GNSSSDR_LIB_PATHS}/opt/gflags/lib ) else() find_path(GFlags_ROOT_DIR libgflags.so PATHS ${GFLAGS_ROOT_USER_PROVIDED}/lib ${GFLAGS_ROOT_USER_PROVIDED}/lib64 ${GNSSSDR_LIB_PATHS} ) endif() if(GFlags_ROOT_DIR) unset(GFlags_INCLUDE_DIRS CACHE) # We are testing only a couple of files in the include directories find_path(GFlags_INCLUDE_DIRS gflags/gflags.h PATHS ${GFlags_ROOT_DIR}/src ${GFLAGS_ROOT_USER_PROVIDED}/include ${GNSSSDR_INCLUDE_PATHS} ${GNSSSDR_INCLUDE_PATHS}/opt/gflags/include ) # Find the libraries set(GFlags_LIBRARY_DIRS ${GFlags_ROOT_DIR}) find_library(GFlags_lib gflags ${GFlags_LIBRARY_DIRS}) if(EXISTS ${GFlags_INCLUDE_DIRS}/gflags/gflags_gflags.h) set(GFLAGS_GREATER_20 TRUE) else() set(GFLAGS_GREATER_20 FALSE) endif() message(STATUS "gflags library found at ${GFlags_lib}") set(GFlags_LIBS ${GFlags_lib}) set(GFlags_FOUND true) mark_as_advanced(GFlags_INCLUDE_DIRS) else() message(STATUS "Cannot find gflags") set(GFlags_FOUND false) endif() if(GFlags_LIBS AND GFlags_INCLUDE_DIRS) if(NOT PACKAGE_VERSION) set(PACKAGE_VERSION "") endif() set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION}) unset(PACKAGE_VERSION) list(GET GFlags_LIBS 0 FIRST_DIR) get_filename_component(GFlags_LIBS_DIR ${FIRST_DIR} DIRECTORY) if(EXISTS ${GFlags_LIBS_DIR}/cmake/gflags/gflags-config-version.cmake) include(${GFlags_LIBS_DIR}/cmake/gflags/gflags-config-version.cmake) endif() if(NOT PACKAGE_VERSION) if(EXISTS ${GFlags_INCLUDE_DIRS}/google/gflags.h) set(PACKAGE_VERSION "2.0") endif() endif() if(PACKAGE_VERSION) set(GFLAGS_VERSION ${PACKAGE_VERSION}) set_package_properties(GFLAGS PROPERTIES DESCRIPTION "C++ library that implements commandline flags processing (found: v${GFLAGS_VERSION})" ) else() set_package_properties(GFLAGS PROPERTIES DESCRIPTION "C++ library that implements commandline flags processing" ) endif() set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION}) else() set_package_properties(GFLAGS PROPERTIES DESCRIPTION "C++ library that implements commandline flags processing" ) endif() set_package_properties(GFLAGS PROPERTIES URL "https://github.com/gflags/gflags" ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GFLAGS DEFAULT_MSG GFlags_LIBS GFlags_INCLUDE_DIRS) if(GFLAGS_VERSION) if(${GFLAGS_VERSION} VERSION_LESS "${GNSSSDR_GFLAGS_MIN_VERSION}") set(GFLAGS_FOUND FALSE) unset(GFlags_LIBS CACHE) unset(GFlags_INCLUDE_DIRS CACHE) endif() endif() if(GFLAGS_FOUND AND NOT TARGET Gflags::gflags) add_library(Gflags::gflags SHARED IMPORTED) set_target_properties(Gflags::gflags PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GFlags_LIBS}" INTERFACE_INCLUDE_DIRECTORIES "${GFlags_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${GFlags_LIBS}" ) endif() gnss-sdr-0.0.20/cmake/Modules/FindGFORTRAN.cmake000066400000000000000000000056711477325711200210700ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() if(NOT GFORTRAN_ROOT) set(GFORTRAN_ROOT_USER_DEFINED /usr/lib) else() set(GFORTRAN_ROOT_USER_DEFINED ${GFORTRAN_ROOT}) endif() if(DEFINED ENV{GFORTRAN_ROOT}) set(GFORTRAN_ROOT_USER_DEFINED $ENV{GFORTRAN_ROOT} ${GFORTRAN_ROOT_USER_DEFINED} ) endif() set(GCC_MAJOR_SERIES 15 14 13 12 11 10 9 8 7 6 5) set(GCC4_SERIES 4.9.1 4.9 4.8.3 4.8.1 4.7.2 4.7 4.8.2 4.8 4.7 4.6 4.5 4.4.4 4.4) set(GCC_SERIES ${GCC_MAJOR_SERIES} ${GCC4_SERIES}) find_library(GFORTRAN NAMES gfortran PATHS ${GFORTRAN_ROOT_USER_DEFINED} /usr/lib/gcc/x86_64-linux-gnu # Debian /usr/lib/gcc/i386-linux-gnu /usr/lib/gcc/i486-linux-gnu /usr/lib/gcc/i586-linux-gnu /usr/lib/gcc/i686-linux-gnu /usr/lib/gcc/arm-linux-gnueabihf /usr/lib/gcc/aarch64-linux-gnu /usr/lib/gcc/arm-linux-gnueabi /usr/lib/gcc/alpha-linux-gnu /usr/lib/gcc/riscv64-linux-gnu /usr/lib/gcc/hppa-linux-gnu /usr/lib/gcc/m68k-linux-gnu /usr/lib/gcc/i686-gnu /usr/lib/gcc/x86_64-kfreebsd-gnu /usr/lib/gcc/i686-kfreebsd-gnu /usr/lib/gcc/mips-linux-gnu /usr/lib/gcc/mips64el-linux-gnuabi64 /usr/lib/gcc/mipsel-linux-gnu /usr/lib/gcc/powerpc-linux-gnu /usr/lib/gcc/powerpc-linux-gnuspe /usr/lib/gcc/powerpc64-linux-gnu /usr/lib/gcc/powerpc64le-linux-gnu /usr/lib/gcc/s390x-linux-gnu /usr/lib/gcc/sparc64-linux-gnu /usr/lib/gcc/x86_64-linux-gnux32 /usr/lib/gcc/sh4-linux-gnu /usr/lib/gcc/i686-redhat-linux # Fedora /usr/lib64/gcc/x86_64-redhat-linux /usr/lib/gcc/x86_64-redhat-linux /usr/lib/gcc/armv7hl-redhat-linux-gnueabi /usr/lib/gcc/aarch64-redhat-linux /usr/lib/gcc/ppc64le-redhat-linux /usr/lib/gcc/s390x-redhat-linux /usr/lib64/gcc/x86_64-suse-linux # openSUSE /usr/lib/gcc/i586-suse-linux /usr/lib/gcc/x86_64-suse-linux /usr/lib/gcc/armv6hl-suse-linux-gnueabi /usr/lib/gcc/armv7hl-suse-linux-gnueabi /usr/lib/gcc/loongarch64-linux-gnu /usr/lib64/gcc/aarch64-suse-linux /usr/lib64/gcc/powerpc64-suse-linux /usr/lib64/gcc/powerpc64le-suse-linux /usr/lib64/gcc/riscv64-suse-linux /usr/lib64/gcc/s390x-suse-linux ${GNSSSDR_LIB_PATHS} PATH_SUFFIXES ${GCC_SERIES} ) set_package_properties(GFORTRAN PROPERTIES URL "https://gcc.gnu.org/fortran/" DESCRIPTION "GNU Fortran library" ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GFORTRAN DEFAULT_MSG GFORTRAN) gnss-sdr-0.0.20/cmake/Modules/FindGLOG.cmake000066400000000000000000000104371477325711200203720ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # - Try to find the Google Glog library # # This module defines the following variables # # GLOG_FOUND - Was Glog found # GLOG_INCLUDE_DIRS - the Glog include directories # GLOG_LIBRARIES - Link to this # # This module accepts the following variables # # GLOG_ROOT - Can be set to Glog install path or Windows build path # # Provides the following imported target: # Glog::glog # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() if(NOT DEFINED GLOG_ROOT) set(GLOG_ROOT /usr /usr/local) endif() if(MSVC) set(LIB_PATHS ${GLOG_ROOT} ${GLOG_ROOT}/Release) else() set(LIB_PATHS ${GLOG_ROOT} ${GLOG_ROOT}/lib) endif() pkg_check_modules(PC_GLOG libglog) macro(_FIND_GLOG_LIBRARIES _var) find_library(${_var} NAMES ${ARGN} HINTS ${PC_GLOG_LIBDIR} PATHS ${LIB_PATHS} ${GNSSSDR_LIB_PATHS} ${GLOG_ROOT}/lib $ENV{GLOG_ROOT}/lib ${GLOG_ROOT}/lib64 $ENV{GLOG_ROOT}/lib64 PATH_SUFFIXES lib ) mark_as_advanced(${_var}) endmacro() macro(_GLOG_APPEND_LIBRARIES _list _release) set(_debug ${_release}_DEBUG) if(${_debug}) set(${_list} ${${_list}} optimized ${${_release}} debug ${${_debug}}) else() set(${_list} ${${_list}} ${${_release}}) endif() endmacro() if(MSVC) find_path(GLOG_INCLUDE_DIR NAMES raw_logging.h HINTS ${PC_GLOG_INCLUDEDIR} PATHS ${GLOG_ROOT}/src/windows PATH_SUFFIXES glog ) else() # Linux/OS X builds find_path(GLOG_INCLUDE_DIR NAMES raw_logging.h HINTS ${PC_GLOG_INCLUDEDIR} PATHS ${GNSSSDR_INCLUDE_PATHS} ${GNSSSDR_INCLUDE_PATHS}/opt/glog/include ${GLOG_ROOT}/include PATH_SUFFIXES glog ) endif() # Find the libraries if(MSVC) _find_glog_libraries(GLOG_LIBRARIES libglog.lib) else() # Linux/OS X builds if(UNIX) _find_glog_libraries(GLOG_LIBRARIES libglog.so) endif() if(APPLE) _find_glog_libraries(GLOG_LIBRARIES glog) endif() endif() # handle the QUIETLY and REQUIRED arguments and set GLOG_FOUND to TRUE if # all listed variables are TRUE include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GLOG DEFAULT_MSG GLOG_LIBRARIES) if(GLOG_FOUND) message(STATUS "glog library found at ${GLOG_LIBRARIES}") if(PC_GLOG_VERSION) set(GLOG_VERSION ${PC_GLOG_VERSION}) endif() endif() if(MSVC) string(REGEX REPLACE "/glog$" "" VAR_WITHOUT ${GLOG_INCLUDE_DIR}) string(REGEX REPLACE "/windows$" "" VAR_WITHOUT ${VAR_WITHOUT}) set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIRS} "${VAR_WITHOUT}") string(REGEX REPLACE "/libglog.lib" "" GLOG_LIBRARIES_DIR ${GLOG_LIBRARIES}) else() # Linux/OS X builds set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR}) string(REGEX REPLACE "/libglog.so" "" GLOG_LIBRARIES_DIR ${GLOG_LIBRARIES}) endif() if(GLOG_FOUND AND GLOG_VERSION) set_package_properties(GLOG PROPERTIES DESCRIPTION "C++ implementation of the Google logging module (found: v${GLOG_VERSION})" ) else() set_package_properties(GLOG PROPERTIES DESCRIPTION "C++ implementation of the Google logging module" ) endif() set_package_properties(GLOG PROPERTIES URL "https://github.com/google/glog" ) string(REGEX MATCH libglog.a GLOG_IS_STATIC ${GLOG_LIBRARIES}) if(GLOG_FOUND AND NOT TARGET Glog::glog) if(GLOG_IS_STATIC) add_library(Glog::glog STATIC IMPORTED) else() add_library(Glog::glog SHARED IMPORTED) endif() set_target_properties(Glog::glog PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GLOG_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${GLOG_LIBRARIES}" ) endif() # Fix for glog 0.7.0 if(EXISTS ${GLOG_INCLUDE_DIRS}/export.h) set_target_properties(Glog::glog PROPERTIES INTERFACE_COMPILE_DEFINITIONS "GLOG_USE_GLOG_EXPORT") endif()gnss-sdr-0.0.20/cmake/Modules/FindGMP.cmake000066400000000000000000000035121477325711200202610ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2024-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() pkg_check_modules(PC_GMP "gmp") if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() set(GMP_DEFINITIONS ${PC_GMP_CFLAGS_OTHER}) find_path(GMP_INCLUDE_DIR NAMES gmpxx.h HINTS ${PC_GMP_INCLUDEDIR} PATHS ${GNSSSDR_INCLUDE_PATHS} ) set(GMP_INCLUDE_DIRS ${GMP_INCLUDE_DIR}) set(GMP_PC_ADD_CFLAGS "-I${GMP_INCLUDE_DIR}") find_library(GMPXX_LIBRARY NAMES gmpxx HINTS ${PC_GMP_LIBDIR} PATHS ${GNSSSDR_LIB_PATHS} ) find_library(GMP_LIBRARY NAMES gmp HINTS ${PC_GMP_LIBDIR} PATHS ${GNSSSDR_LIB_PATHS} ) set(GMP_LIBRARIES ${GMPXX_LIBRARY} ${GMP_LIBRARY}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GMP DEFAULT_MSG GMPXX_LIBRARY GMP_LIBRARY GMP_INCLUDE_DIR) if(GMP_FOUND AND NOT TARGET Gmp::gmp) add_library(Gmp::gmp SHARED IMPORTED) set_target_properties(Gmp::gmp PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GMPXX_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${GMP_LIBRARIES}" ) endif() set_package_properties(GMP PROPERTIES URL "https://gmplib.org/" ) if(PC_GMP_VERSION) set_package_properties(GMP PROPERTIES DESCRIPTION "The GNU Multiple Precision Arithmetic Library (found: v.${PC_GMP_VERSION})" ) else() set_package_properties(GMP PROPERTIES DESCRIPTION "The GNU Multiple Precision Arithmetic Library" ) endif() mark_as_advanced(GMPXX_LIBRARY GMP_LIBRARY GMP_INCLUDE_DIR) gnss-sdr-0.0.20/cmake/Modules/FindGNSSSIMULATOR.cmake000066400000000000000000000026561477325711200217200ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() if(GNSSSIMULATOR_ROOT) set(GNSSSIMULATOR_ROOT_USER_DEFINED ${GNSSSIMULATOR_ROOT}) else() set(GNSSSIMULATOR_ROOT_USER_DEFINED /usr/local/bin) endif() if(DEFINED ENV{GNSSSIMULATOR_ROOT}) set(GNSSSIMULATOR_ROOT_USER_DEFINED ${GNSSSIMULATOR_ROOT_USER_DEFINED} $ENV{GNSSSIMULATOR} ) endif() set(GNSSSIMULATOR_ROOT_USER_DEFINED ${GNSSSIMULATOR_ROOT_USER_DEFINED} ${CMAKE_INSTALL_PREFIX} ) find_program(SW_GENERATOR_BIN gnss_sim PATHS ${GNSSSIMULATOR_ROOT_USER_DEFINED} /usr /usr/local ${CMAKE_SYSTEM_PREFIX_PATH} ${CMAKE_INSTALL_FULL_BINDIR} PATH_SUFFIXES bin ONLY_CMAKE_FIND_ROOT_PATH ) if(SW_GENERATOR_BIN AND CMAKE_CROSSCOMPILING) if(CMAKE_SYSROOT) string(REGEX REPLACE "${CMAKE_SYSROOT}" "" SW_GENERATOR_BIN "${SW_GENERATOR_BIN}") elseif(DEFINED ENV{OECORE_TARGET_SYSROOT}) string(REGEX REPLACE "$ENV{OECORE_TARGET_SYSROOT}" "" SW_GENERATOR_BIN "${SW_GENERATOR_BIN}") endif() endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GNSSSIMULATOR DEFAULT_MSG SW_GENERATOR_BIN) mark_as_advanced(SW_GENERATOR_BIN) gnss-sdr-0.0.20/cmake/Modules/FindGNSSTK.cmake000066400000000000000000000111031477325711200206420ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2022-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # - Find gnsstk library # Find the native gnsstk includes and library # This module defines # GNSSTK_INCLUDE_DIR, where to find Rinex3ObsBase.hpp, etc. # GNSSTK_FOUND, If false, do not try to use GNSSTK. # GNSSTK_LIBRARY, where to find the GNSSTK library. # # Provides the following imported target: # Gnsstk::gnsstk # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() if(NOT GNSSTK_ROOT) set(GNSSTK_ROOT_USER_DEFINED /usr/local) else() set(GNSSTK_ROOT_USER_DEFINED ${GNSSTK_ROOT}) endif() if(DEFINED ENV{GNSSTK_ROOT}) set(GNSSTK_ROOT_USER_DEFINED ${GNSSTK_ROOT_USER_DEFINED} $ENV{GNSSTK_ROOT} ) endif() unset(GNSSTK_INCLUDE_DIR CACHE) unset(GNSSTK_USES_GPSTK_NAMESPACE CACHE) find_path(GNSSTK_INCLUDE_DIR gnsstk/Rinex3ObsBase.hpp PATHS ${GNSSTK_ROOT_USER_DEFINED}/include ${GNSSSDR_INCLUDE_PATHS} ) set(GNSSTK_NAMES ${CMAKE_FIND_LIBRARY_PREFIXES}gnsstk${CMAKE_SHARED_LIBRARY_SUFFIX}) if(NOT GNSSTK_INCLUDE_DIR) find_path(GNSSTK_INCLUDE_DIR gpstk/Rinex3ObsBase.hpp PATHS ${GNSSTK_ROOT_USER_DEFINED}/include ${GNSSSDR_INCLUDE_PATHS} ) if(GNSSTK_INCLUDE_DIR) set(GNSSTK_NAMES gpstk ${CMAKE_FIND_LIBRARY_PREFIXES}gpstk${CMAKE_SHARED_LIBRARY_SUFFIX}) set(GNSSTK_USES_GPSTK_NAMESPACE TRUE) endif() endif() include(GNUInstallDirs) find_library(GNSSTK_LIBRARY NAMES ${GNSSTK_NAMES} PATHS ${GNSSTK_ROOT_USER_DEFINED}/${CMAKE_INSTALL_LIBDIR} ${GNSSSDR_LIB_PATHS} ) if(GNSSTK_LIBRARY AND GNSSTK_INCLUDE_DIR) set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION}) unset(PACKAGE_VERSION) if(GNSSTK_USES_GPSTK_NAMESPACE) if(EXISTS ${GNSSTK_INCLUDE_DIR}/../share/cmake/GPSTK/GPSTKConfigVersion.cmake) include(${GNSSTK_INCLUDE_DIR}/../share/cmake/GPSTK/GPSTKConfigVersion.cmake) endif() else() if(EXISTS ${GNSSTK_INCLUDE_DIR}/../share/cmake/GNSSTK/GNSSTKConfigVersion.cmake) include(${GNSSTK_INCLUDE_DIR}/../share/cmake/GNSSTK/GNSSTKConfigVersion.cmake) endif() endif() if(PACKAGE_VERSION) set(GNSSTK_VERSION ${PACKAGE_VERSION}) endif() set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION}) endif() if(GNSSTK_VERSION) if(GNSSTK_VERSION VERSION_LESS "9.0.0") set(GNSSTK_OLDER_THAN_9 TRUE) endif() if(GNSSTK_VERSION VERSION_LESS "13.0.0") set(GNSSTK_OLDER_THAN_13 TRUE) endif() endif() if(EXISTS ${GNSSTK_INCLUDE_DIR}/gnsstk/GPSEphemerisStore.hpp) set(GNSSTK_OLDER_THAN_13 TRUE) endif() # handle the QUIET and REQUIRED arguments and set GNSSTK_FOUND to TRUE if # all listed variables are TRUE include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GNSSTK DEFAULT_MSG GNSSTK_LIBRARY GNSSTK_INCLUDE_DIR) if(GNSSTK_FOUND AND GNSSTK_VERSION) set_package_properties(GNSSTK PROPERTIES DESCRIPTION "The GNSSTk C++ Library (found: v${GNSSTK_VERSION})" ) else() set_package_properties(GNSSTK PROPERTIES DESCRIPTION "The GNSSTk C++ Library" ) endif() if(GNSSTK_FOUND AND GNSSTK_USES_GPSTK_NAMESPACE AND NOT EXISTS ${GNSSTK_INCLUDE_DIR}/gpstk/SatelliteSystem.hpp) set(GNSSTK_OLDER_THAN_8 TRUE) endif() set_package_properties(GNSSTK PROPERTIES URL "https://github.com/SGL-UT/gnsstk/" TYPE OPTIONAL ) if(GNSSTK_FOUND AND NOT ENABLE_OWN_GNSSTK AND NOT TARGET Gnsstk::gnsstk) add_library(Gnsstk::gnsstk SHARED IMPORTED) if(GNSSTK_USES_GPSTK_NAMESPACE) set_target_properties(Gnsstk::gnsstk PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GNSSTK_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${GNSSTK_INCLUDE_DIR};${GNSSTK_INCLUDE_DIR}/gpstk" INTERFACE_LINK_LIBRARIES "${GNSSTK_LIBRARY}" IMPORTED_IMPLIB "${GNSSTK_LIBRARY}" ) else() set_target_properties(Gnsstk::gnsstk PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GNSSTK_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${GNSSTK_INCLUDE_DIR};${GNSSTK_INCLUDE_DIR}/gnsstk" INTERFACE_LINK_LIBRARIES "${GNSSTK_LIBRARY}" IMPORTED_IMPLIB "${GNSSTK_LIBRARY}" ) endif() endif() mark_as_advanced(GNSSTK_LIBRARY GNSSTK_INCLUDE_DIR GNSSTK_USES_GPSTK_NAMESPACE GNSSTK_OLDER_THAN_8 GNSSTK_OLDER_THAN_9 GNSSTK_OLDER_THAN_13 ) gnss-sdr-0.0.20/cmake/Modules/FindGNUPLOT.cmake000066400000000000000000000031621477325711200207670ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2021-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() find_program(GNUPLOT_EXECUTABLE NAMES gnuplot pgnuplot PATHS ${GNSSSDR_BIN_PATHS} ONLY_CMAKE_FIND_ROOT_PATH ) if(NOT CMAKE_CROSSCOMPILING) if(GNUPLOT_EXECUTABLE) execute_process(COMMAND "${GNUPLOT_EXECUTABLE}" --version OUTPUT_VARIABLE GNUPLOT_OUTPUT_VARIABLE ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) string(REGEX REPLACE "^gnuplot ([0-9\\.]+)( patchlevel )?" "\\1." GNUPLOT_VERSION_STRING "${GNUPLOT_OUTPUT_VARIABLE}") string(REGEX REPLACE "\\.$" "" GNUPLOT_VERSION_STRING "${GNUPLOT_VERSION_STRING}") unset(GNUPLOT_OUTPUT_VARIABLE) endif() else() if(GNUPLOT_EXECUTABLE) if(CMAKE_SYSROOT) string(REGEX REPLACE "${CMAKE_SYSROOT}" "" GNUPLOT_EXECUTABLE "${GNUPLOT_EXECUTABLE}") elseif(DEFINED ENV{OECORE_TARGET_SYSROOT}) string(REGEX REPLACE "$ENV{OECORE_TARGET_SYSROOT}" "" GNUPLOT_EXECUTABLE "${GNUPLOT_EXECUTABLE}") endif() else() message(STATUS "Warning: Gnuplot is not found, you can install it later.") message(STATUS " Setting default path to /usr/bin/gnuplot") set(GNUPLOT_EXECUTABLE "/usr/bin/gnuplot") endif() endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GNUPLOT DEFAULT_MSG GNUPLOT_EXECUTABLE) gnss-sdr-0.0.20/cmake/Modules/FindGNURADIO.cmake000066400000000000000000000353371477325711200210600ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ######################################################################## # Find GNU Radio ######################################################################## if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() include(FindPackageHandleStandardArgs) # if GR_REQUIRED_COMPONENTS is not defined, it will be set to the following list if(NOT GR_REQUIRED_COMPONENTS) set(GR_REQUIRED_COMPONENTS RUNTIME PMT BLOCKS FFT FILTER ANALOG) endif() # Allows us to use all .cmake files in this directory list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_LIST_DIR}) # Easily access all libraries and includes of GNU Radio set(GNURADIO_ALL_LIBRARIES "") set(GNURADIO_ALL_INCLUDE_DIRS "") macro(LIST_CONTAINS var value) set(${var}) foreach(value2 ${ARGN}) if(${value} STREQUAL ${value2}) set(${var} TRUE) endif() endforeach() endmacro() if(NOT GNURADIO_INSTALL_PREFIX) set(GNURADIO_INSTALL_PREFIX_USER_PROVIDED /usr) else() set(GNURADIO_INSTALL_PREFIX_USER_PROVIDED ${GNURADIO_INSTALL_PREFIX}) endif() if(GNURADIO_ROOT) set(GNURADIO_INSTALL_PREFIX_USER_PROVIDED ${GNURADIO_INSTALL_PREFIX_USER_PROVIDED} ${GNURADIO_ROOT} ) endif() if(DEFINED ENV{GNURADIO_ROOT}) set(GNURADIO_INSTALL_PREFIX_USER_PROVIDED ${GNURADIO_INSTALL_PREFIX_USER_PROVIDED} $ENV{GNURADIO_ROOT} ) endif() if(DEFINED ENV{GNURADIO_RUNTIME_DIR}) set(GNURADIO_INSTALL_PREFIX_USER_PROVIDED ${GNURADIO_INSTALL_PREFIX_USER_PROVIDED} $ENV{GNURADIO_RUNTIME_DIR} ) endif() set(GNURADIO_INSTALL_PREFIX_USER_PROVIDED ${GNURADIO_INSTALL_PREFIX_USER_PROVIDED} ${CMAKE_INSTALL_PREFIX} ) function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE) list_contains(REQUIRED_MODULE ${EXTVAR} ${GR_REQUIRED_COMPONENTS}) if(NOT REQUIRED_MODULE) #message("Ignoring GNU Radio Module ${EXTVAR}") return() endif() message(STATUS "Checking for GNU Radio Module: ${EXTVAR}") # check for .pc hints pkg_check_modules(PC_GNURADIO_${EXTVAR} QUIET ${PCNAME}) if(NOT PC_GNURADIO_${EXTVAR}_FOUND) set(PC_GNURADIO_${EXTVAR}_LIBRARIES ${LIBFILE}) endif() set(INCVAR_NAME "GNURADIO_${EXTVAR}_INCLUDE_DIRS") set(LIBVAR_NAME "GNURADIO_${EXTVAR}_LIBRARIES") set(PC_INCDIR ${PC_GNURADIO_${EXTVAR}_INCLUDEDIR}) set(PC_LIBDIR ${PC_GNURADIO_${EXTVAR}_LIBDIR}) # look for include files find_path(${INCVAR_NAME} NAMES ${INCFILE} HINTS ${PC_INCDIR} PATHS ${GNURADIO_INSTALL_PREFIX_USER_PROVIDED}/include ${GNSSSDR_INCLUDE_PATHS} ) # look for libs foreach(libname ${PC_GNURADIO_${EXTVAR}_LIBRARIES}) find_library(${LIBVAR_NAME}_${libname} NAMES ${libname} ${libname}-${PC_GNURADIO_RUNTIME_VERSION} HINTS ${PC_LIBDIR} PATHS ${GNURADIO_INSTALL_PREFIX_USER_PROVIDED}/${CMAKE_INSTALL_LIBDIR} ${GNSSSDR_LIB_PATHS} ) list(APPEND ${LIBVAR_NAME} ${${LIBVAR_NAME}_${libname}}) endforeach() set(${LIBVAR_NAME} ${${LIBVAR_NAME}} PARENT_SCOPE) # show results message(STATUS " * INCLUDES=${GNURADIO_${EXTVAR}_INCLUDE_DIRS}") message(STATUS " * LIBS=${GNURADIO_${EXTVAR}_LIBRARIES}") # append to all includes and libs list set(GNURADIO_ALL_INCLUDE_DIRS ${GNURADIO_ALL_INCLUDE_DIRS} ${GNURADIO_${EXTVAR}_INCLUDE_DIRS} PARENT_SCOPE) set(GNURADIO_ALL_LIBRARIES ${GNURADIO_ALL_LIBRARIES} ${GNURADIO_${EXTVAR}_LIBRARIES} PARENT_SCOPE) if(GNURADIO_${EXTVAR}_LIBRARIES AND GNURADIO_${EXTVAR}_INCLUDE_DIRS) set(GNURADIO_${EXTVAR}_FOUND TRUE) endif() message(STATUS "GNURADIO_${EXTVAR}_FOUND = ${GNURADIO_${EXTVAR}_FOUND}") set(GNURADIO_${EXTVAR}_FOUND ${GNURADIO_${EXTVAR}_FOUND} PARENT_SCOPE) # generate an error if the module is missing if(NOT GNURADIO_${EXTVAR}_FOUND) message(STATUS "Required GNU Radio Component: ${EXTVAR} missing!") set(GNURADIO_FOUND FALSE) # Trick for feature_summary endif() # Create imported target string(TOLOWER ${EXTVAR} gnuradio_component) if(NOT TARGET Gnuradio::${gnuradio_component}) add_library(Gnuradio::${gnuradio_component} SHARED IMPORTED) set(GNURADIO_LIBRARY ${GNURADIO_${EXTVAR}_LIBRARIES}) list(GET GNURADIO_LIBRARY 0 FIRST_DIR) get_filename_component(GNURADIO_DIR ${FIRST_DIR} ABSOLUTE) set_target_properties(Gnuradio::${gnuradio_component} PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GNURADIO_DIR}" INTERFACE_INCLUDE_DIRECTORIES "${GNURADIO_${EXTVAR}_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${GNURADIO_LIBRARY}" ) endif() mark_as_advanced(GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS) endfunction() gr_module(RUNTIME gnuradio-runtime gnuradio/top_block.h gnuradio-runtime) gr_module(PMT gnuradio-runtime pmt/pmt.h gnuradio-pmt) gr_module(BLOCKS gnuradio-blocks gnuradio/blocks/api.h gnuradio-blocks) gr_module(FEC gnuradio-fec gnuradio/fec/api.h gnuradio-fec) gr_module(FFT gnuradio-fft gnuradio/fft/api.h gnuradio-fft) gr_module(FILTER gnuradio-filter gnuradio/filter/api.h gnuradio-filter) gr_module(ANALOG gnuradio-analog gnuradio/analog/api.h gnuradio-analog) gr_module(DIGITAL gnuradio-digital gnuradio/digital/api.h gnuradio-digital) gr_module(AUDIO gnuradio-audio gnuradio/audio/api.h gnuradio-audio) gr_module(CHANNELS gnuradio-channels gnuradio/channels/api.h gnuradio-channels) gr_module(QTGUI gnuradio-qtgui gnuradio/qtgui/api.h gnuradio-qtgui) gr_module(TRELLIS gnuradio-trellis gnuradio/trellis/api.h gnuradio-trellis) gr_module(UHD gnuradio-uhd gnuradio/uhd/api.h gnuradio-uhd) gr_module(VOCODER gnuradio-vocoder gnuradio/vocoder/api.h gnuradio-vocoder) gr_module(WAVELET gnuradio-wavelet gnuradio/wavelet/api.h gnuradio-wavelet) gr_module(ZEROMQ gnuradio-zeromq gnuradio/zeromq/api.h gnuradio-zeromq) list(REMOVE_DUPLICATES GNURADIO_ALL_INCLUDE_DIRS) list(REMOVE_DUPLICATES GNURADIO_ALL_LIBRARIES) if(NOT PC_GNURADIO_RUNTIME_VERSION) set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION}) unset(PACKAGE_VERSION) list(GET GNURADIO_BLOCKS_LIBRARIES 0 FIRST_DIR) get_filename_component(GNURADIO_BLOCKS_DIR ${FIRST_DIR} DIRECTORY) if(EXISTS ${GNURADIO_BLOCKS_DIR}/cmake/gnuradio/GnuradioConfigVersion.cmake) set(PACKAGE_FIND_VERSION_MAJOR 3) set(PACKAGE_FIND_VERSION_MINOR 7) set(PACKAGE_FIND_VERSION_PATCH 4) include(${GNURADIO_BLOCKS_DIR}/cmake/gnuradio/GnuradioConfigVersion.cmake) endif() if(PACKAGE_VERSION) set(PC_GNURADIO_RUNTIME_VERSION ${PACKAGE_VERSION}) endif() set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION}) endif() # Trick to find out that GNU Radio is >= 3.7.4 if pkgconfig is not present if(NOT PC_GNURADIO_RUNTIME_VERSION) find_file(GNURADIO_VERSION_GREATER_THAN_373 NAMES gnuradio/blocks/tsb_vector_sink_f.h PATHS ${GNURADIO_INSTALL_PREFIX_USER_PROVIDED}/include ${GNSSSDR_INCLUDE_PATHS} ) if(GNURADIO_VERSION_GREATER_THAN_373) set(PC_GNURADIO_RUNTIME_VERSION "3.7.4+") endif() find_file(GNURADIO_VERSION_GREATER_THAN_38 NAMES gnuradio/filter/mmse_resampler_cc.h PATHS ${GNURADIO_INSTALL_PREFIX_USER_PROVIDED}/include ${GNSSSDR_INCLUDE_PATHS} ) if(GNURADIO_VERSION_GREATER_THAN_38) set(PC_GNURADIO_RUNTIME_VERSION "3.8.0+") endif() endif() set(GNURADIO_VERSION ${PC_GNURADIO_RUNTIME_VERSION}) if(NOT GNSSSDR_GNURADIO_MIN_VERSION) set(GNSSSDR_GNURADIO_MIN_VERSION "3.7.3") endif() if(GNURADIO_VERSION) if(GNURADIO_VERSION VERSION_LESS ${GNSSSDR_GNURADIO_MIN_VERSION}) unset(GNURADIO_RUNTIME_FOUND) message(STATUS "The GNU Radio version installed in your system (v${GNURADIO_VERSION}) is too old.") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") message("Go to https://github.com/gnuradio/pybombs") message("and follow the instructions to install GNU Radio in your system.") endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") message("You can install it easily via Macports:") message(" sudo port install gnuradio ") message("Alternatively, you can use homebrew:") message(" brew install gnuradio") endif() message(FATAL_ERROR "GNU Radio v${GNSSSDR_GNURADIO_MIN_VERSION} or later is required to build gnss-sdr.") endif() set_package_properties(GNURADIO PROPERTIES DESCRIPTION "The free and open software radio ecosystem (found: v${GNURADIO_VERSION})" ) else() set_package_properties(GNURADIO PROPERTIES DESCRIPTION "The free and open software radio ecosystem" ) endif() find_package_handle_standard_args(GNURADIO DEFAULT_MSG GNURADIO_RUNTIME_FOUND) # Detect if using standard pointers set(GNURADIO_USES_STD_POINTERS FALSE) if(GNURADIO_VERSION VERSION_GREATER 3.8.99) file(STRINGS ${GNURADIO_RUNTIME_INCLUDE_DIRS}/gnuradio/basic_block.h _basic_block) foreach(_loop_var IN LISTS _basic_block) string(STRIP "${_loop_var}" _file_line) if("public std::enable_shared_from_this" STREQUAL "${_file_line}") set(GNURADIO_USES_STD_POINTERS TRUE) endif() endforeach() endif() # Detect if FFT are templates if(EXISTS ${GNURADIO_FFT_INCLUDE_DIRS}/gnuradio/fft/fft_vfc.h) set(GNURADIO_FFT_USES_TEMPLATES FALSE) else() set(GNURADIO_FFT_USES_TEMPLATES TRUE) endif() # Search for IIO component if(GNURADIO_VERSION VERSION_GREATER 3.8.99) pkg_check_modules(PC_GNURADIO_IIO QUIET gnuradio-iio) # look for include files message(STATUS "Checking for GNU Radio Module: IIO") find_path(GNURADIO_IIO_INCLUDE_DIRS NAMES gnuradio/iio/api.h HINTS ${PC_GNURADIO_IIO_INCLUDEDIR} PATHS ${GNURADIO_INSTALL_PREFIX_USER_PROVIDED}/include ${GNSSSDR_INCLUDE_PATHS} ) # look for libs find_library(GNURADIO_IIO_LIBRARIES NAMES gnuradio-iio gnuradio-iio-${GNURADIO_VERSION} HINTS ${PC_GNURADIO_IIO_LIBDIR} PATHS ${GNURADIO_INSTALL_PREFIX_USER_PROVIDED}/lib ${GNURADIO_INSTALL_PREFIX_USER_PROVIDED}/lib64 ${GNSSSDR_LIB_PATHS} ) if(GNURADIO_IIO_LIBRARIES) message(STATUS " * INCLUDES=${GNURADIO_IIO_INCLUDE_DIRS}") message(STATUS " * LIBS=${GNURADIO_IIO_LIBRARIES}") else() message(STATUS " * IIO GNU Radio Module not found.") endif() if(GNURADIO_IIO_LIBRARIES AND GNURADIO_IIO_INCLUDE_DIRS) set(GNURADIO_IIO_FOUND TRUE) endif() if(GNURADIO_IIO_FOUND) message(STATUS "GNURADIO_IIO_FOUND = ${GNURADIO_IIO_FOUND}") # append to all includes and libs list set(GNURADIO_ALL_INCLUDE_DIRS ${GNURADIO_ALL_INCLUDE_DIRS} ${GNURADIO_IIO_INCLUDE_DIRS}) set(GNURADIO_ALL_LIBRARIES ${GNURADIO_ALL_LIBRARIES} ${GNURADIO_IIO_LIBRARIES}) # Create imported target if(NOT TARGET Gnuradio::iio) add_library(Gnuradio::iio SHARED IMPORTED) set(GNURADIO_LIBRARY ${GNURADIO_IIO_LIBRARIES}) list(GET GNURADIO_LIBRARY 0 FIRST_DIR) get_filename_component(GNURADIO_DIR ${FIRST_DIR} ABSOLUTE) set_target_properties(Gnuradio::iio PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GNURADIO_DIR}" INTERFACE_INCLUDE_DIRECTORIES "${GNURADIO_IIO_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${GNURADIO_LIBRARY}" ) endif() # check templatized API if(NOT EXISTS "${GNURADIO_IIO_INCLUDE_DIRS}/gnuradio/iio/pluto_source.h") set(GR_IIO_TEMPLATIZED_API TRUE) endif() endif() endif() # Check if PMT uses boost::any or std::any if(GNURADIO_PMT_INCLUDE_DIRS) file(STRINGS ${GNURADIO_PMT_INCLUDE_DIRS}/pmt/pmt.h _pmt_content) set(_uses_boost TRUE) foreach(_loop_var IN LISTS _pmt_content) string(STRIP "${_loop_var}" _file_line) if("#include " STREQUAL "${_file_line}") set(_uses_boost FALSE) endif() endforeach() if(${_uses_boost}) set(PMT_USES_BOOST_ANY TRUE) endif() endif() # Check if GNU Radio uses log4cpp or spdlog if(GNURADIO_RUNTIME_INCLUDE_DIRS) if(EXISTS "${GNURADIO_RUNTIME_INCLUDE_DIRS}/gnuradio/logger.h") file(STRINGS ${GNURADIO_RUNTIME_INCLUDE_DIRS}/gnuradio/logger.h _logger_content) set(_uses_log4cpp FALSE) set(_uses_spdlog FALSE) foreach(_loop_var IN LISTS _logger_content) string(STRIP "${_loop_var}" _file_line) if("#include " STREQUAL "${_file_line}") set(_uses_log4cpp TRUE) endif() if("#include " STREQUAL "${_file_line}") set(_uses_spdlog TRUE) endif() endforeach() if(${_uses_log4cpp}) find_package(LOG4CPP) set_package_properties(LOG4CPP PROPERTIES PURPOSE "Required by GNU Radio." TYPE REQUIRED ) if(CMAKE_VERSION VERSION_GREATER 3.13) target_link_libraries(Gnuradio::filter INTERFACE Log4cpp::log4cpp) target_link_libraries(Gnuradio::runtime INTERFACE Log4cpp::log4cpp) else() set_target_properties(Gnuradio::filter PROPERTIES INTERFACE_LINK_LIBRARIES Log4cpp::log4cpp) set_target_properties(Gnuradio::runtime PROPERTIES INTERFACE_LINK_LIBRARIES Log4cpp::log4cpp) endif() endif() if(${_uses_spdlog}) find_package(spdlog REQUIRED CONFIG) set_package_properties(spdlog PROPERTIES URL "https://github.com/gabime/spdlog" DESCRIPTION "Very fast, header-only/compiled, C++ logging library (found: v${spdlog_VERSION})" PURPOSE "Required by GNU Radio." TYPE REQUIRED ) set(GNURADIO_USES_SPDLOG TRUE) if(CMAKE_VERSION VERSION_GREATER 3.13) target_link_libraries(Gnuradio::runtime INTERFACE spdlog::spdlog) target_link_libraries(Gnuradio::blocks INTERFACE spdlog::spdlog) else() set_target_properties(Gnuradio::runtime PROPERTIES INTERFACE_LINK_LIBRARIES spdlog::spdlog) set_target_properties(Gnuradio::blocks PROPERTIES INTERFACE_LINK_LIBRARIES spdlog::spdlog) endif() endif() endif() endif() set_package_properties(GNURADIO PROPERTIES URL "https://www.gnuradio.org/" ) gnss-sdr-0.0.20/cmake/Modules/FindGOOGLETEST.cmake000066400000000000000000000046331477325711200213170ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # - Try to find Googletest source code # # The following environment variable is optionally searched for: # GTEST_DIR: Base directory where Googletest source code is found. # # The following are set after configuration is done: # GOOGLETEST_FOUND # LIBGTEST_DEV_DIR # GTEST_INCLUDE_DIRS if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_GTEST gtest) if(NOT GTEST_DIR) set(GTEST_DIR_USER_PROVIDED /usr/local) else() set(GTEST_DIR_USER_PROVIDED ${GTEST_DIR}) endif() if(DEFINED ENV{GTEST_DIR}) set(GTEST_DIR_USER_PROVIDED ${GTEST_DIR_USER_PROVIDED} $ENV{GTEST_DIR} ) endif() find_path(LIBGTEST_DEV_DIR NAMES src/gtest-all.cc PATHS ${GTEST_DIR_USER_PROVIDED} ${GTEST_DIR_USER_PROVIDED}/googletest /usr/src/googletest/googletest /usr/src/gtest ${GNSSSDR_INCLUDE_PATHS}/gtest ${GNSSSDR_INCLUDE_PATHS}/googletest ${CMAKE_SYSTEM_PREFIX_PATH}/src/googletest/googletest ${CMAKE_SYSTEM_PREFIX_PATH}/src/gtest-1.7.0 ${CMAKE_SYSTEM_PREFIX_PATH}/opt/googletest/include/googletest/googletest ) find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h HINTS ${PC_GTEST_INCLUDEDIR} PATHS ${GTEST_DIR_USER_PROVIDED}/googletest/include ${GNSSSDR_INCLUDE_PATHS} ${CMAKE_SYSTEM_PREFIX_PATH}/src/gtest-1.7.0/include ${CMAKE_SYSTEM_PREFIX_PATH}/opt/googletest/include ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GOOGLETEST DEFAULT_MSG LIBGTEST_DEV_DIR GTEST_INCLUDE_DIRS) if(GOOGLETEST_FOUND AND PC_GTEST_VERSION) set(GOOGLETEST_VERSION ${PC_GTEST_VERSION}) set_package_properties(GOOGLETEST PROPERTIES DESCRIPTION "Source code of Google's Testing Framework (found: v${GOOGLETEST_VERSION})" ) else() set_package_properties(GOOGLETEST PROPERTIES DESCRIPTION "Source code of Google's Testing Framework" ) endif() set_package_properties(GOOGLETEST PROPERTIES URL "https://github.com/google/googletest" ) mark_as_advanced(LIBGTEST_DEV_DIR GTEST_INCLUDE_DIRS) gnss-sdr-0.0.20/cmake/Modules/FindGPERFTOOLS.cmake000066400000000000000000000077621477325711200213350ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # Tries to find Gperftools. # # Usage of this module as follows: # # find_package(GPERFTOOLS) # # Variables used by this module, they can change the default behaviour and need # to be set before calling find_package: # # GPERFTOOLS_ROOT Set this variable to the root installation of # Gperftools if the module has problems finding # the proper installation path. # # Variables defined by this module: # # GPERFTOOLS_FOUND System has Gperftools libs/headers # GPERFTOOLS_LIBRARIES The Gperftools libraries (tcmalloc & profiler) # GPERFTOOLS_INCLUDE_DIR The location of Gperftools headers # # Provides the following imported targets: # Gperftools::tcmalloc # Gperftools::profiler # Gperftools::gperftools # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() if(NOT GPERFTOOLS_ROOT) set(GPERFTOOLS_ROOT_USER_DEFINED /usr/local) else() set(GPERFTOOLS_ROOT_USER_DEFINED ${GPERFTOOLS_ROOT}) endif() if(DEFINED ENV{GPERFTOOLS_ROOT}) set(GPERFTOOLS_ROOT_USER_DEFINED ${GPERFTOOLS_ROOT_USER_DEFINED} $ENV{GPERFTOOLS_ROOT} ) endif() if(Gperftools_ROOT_DIR) set(GPERFTOOLS_ROOT_USER_DEFINED ${GPERFTOOLS_ROOT_USER_DEFINED} ${Gperftools_ROOT_DIR} ) endif() find_library(GPERFTOOLS_TCMALLOC NAMES tcmalloc PATHS ${GPERFTOOLS_ROOT_USER_DEFINED}/lib ${GPERFTOOLS_ROOT_USER_DEFINED}/lib64 ${GNSSSDR_LIB_PATHS} ) find_library(GPERFTOOLS_PROFILER NAMES profiler PATHS ${GPERFTOOLS_ROOT_USER_DEFINED}/lib ${GPERFTOOLS_ROOT_USER_DEFINED}/lib64 ${GNSSSDR_LIB_PATHS} ) find_library(GPERFTOOLS_TCMALLOC_AND_PROFILER NAMES tcmalloc_and_profiler PATHS ${GPERFTOOLS_ROOT_USER_DEFINED}/lib ${GPERFTOOLS_ROOT_USER_DEFINED}/lib64 ${GNSSSDR_LIB_PATHS} ) find_path(GPERFTOOLS_INCLUDE_DIR NAMES gperftools/heap-profiler.h PATHS ${GPERFTOOLS_ROOT_USER_DEFINED}/include ${GNSSSDR_INCLUDE_PATHS} ) set(GPERFTOOLS_LIBRARIES ${GPERFTOOLS_TCMALLOC_AND_PROFILER}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args( GPERFTOOLS DEFAULT_MSG GPERFTOOLS_LIBRARIES GPERFTOOLS_INCLUDE_DIR GPERFTOOLS_TCMALLOC GPERFTOOLS_PROFILER ) if(GPERFTOOLS_FOUND AND NOT TARGET Gperftools::tcmalloc) add_library(Gperftools::tcmalloc SHARED IMPORTED) set_target_properties(Gperftools::tcmalloc PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GPERFTOOLS_TCMALLOC}" INTERFACE_INCLUDE_DIRECTORIES "${GPERFTOOLS_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${GPERFTOOLS_TCMALLOC}" ) endif() if(GPERFTOOLS_FOUND AND NOT TARGET Gperftools::profiler) add_library(Gperftools::profiler SHARED IMPORTED) set_target_properties(Gperftools::profiler PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GPERFTOOLS_PROFILER}" INTERFACE_INCLUDE_DIRECTORIES "${GPERFTOOLS_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${GPERFTOOLS_PROFILER}" ) endif() if(GPERFTOOLS_FOUND AND NOT TARGET Gperftools::gperftools) add_library(Gperftools::gperftools SHARED IMPORTED) set_target_properties(Gperftools::gperftools PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GPERFTOOLS_TCMALLOC_AND_PROFILER}" INTERFACE_INCLUDE_DIRECTORIES "${GPERFTOOLS_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${GPERFTOOLS_TCMALLOC_AND_PROFILER}" ) endif() set_package_properties(GPERFTOOLS PROPERTIES URL "https://github.com/gperftools/gperftools" DESCRIPTION "Collection of performance analysis tools" ) mark_as_advanced( GPERFTOOLS_TCMALLOC GPERFTOOLS_PROFILER GPERFTOOLS_TCMALLOC_AND_PROFILER GPERFTOOLS_LIBRARIES GPERFTOOLS_INCLUDE_DIR ) gnss-sdr-0.0.20/cmake/Modules/FindGRDBFCTTC.cmake000066400000000000000000000042311477325711200211370ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ######################################################################## # Find GR-DBFCTTC Module ######################################################################## # # Provides the following imported target: # Gnuradio::dbfcttc # if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_GR_DBFCTTC gr-dbfcttc) if(NOT GRDBFCTTC_ROOT) set(GRDBFCTTC_ROOT_USER_DEFINED /usr/local) else() set(GRDBFCTTC_ROOT_USER_DEFINED ${GRDBFCTTC_ROOT}) endif() if(DEFINED ENV{GRDBFCTTC_ROOT}) set(GRDBFCTTC_ROOT_USER_DEFINED ${GRDBFCTTC_ROOT_USER_DEFINED} $ENV{GRDBFCTTC_ROOT} ) endif() if(DEFINED ENV{GR_DBFCTTC_DIR}) set(GRDBFCTTC_ROOT_USER_DEFINED ${GRDBFCTTC_ROOT_USER_DEFINED} $ENV{GR_DBFCTTC_DIR} ) endif() set(GRDBFCTTC_ROOT_USER_DEFINED ${GRDBFCTTC_ROOT_USER_DEFINED} ${CMAKE_INSTALL_PREFIX} ) find_path( GR_DBFCTTC_INCLUDE_DIRS NAMES dbfcttc/api.h HINTS ${PC_GR_DBFCTTC_INCLUDEDIR} PATHS ${GRDBFCTTC_ROOT_USER_DEFINED}/include ${GNSSSDR_INCLUDE_PATHS} ) find_library( GR_DBFCTTC_LIBRARIES NAMES gnuradio-dbfcttc HINTS ${PC_GR_DBFCTTC_LIBDIR} PATHS ${GRDBFCTTC_ROOT_USER_DEFINED}/lib ${GRDBFCTTC_ROOT_USER_DEFINED}/lib64 ${GNSSSDR_LIB_PATHS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GRDBFCTTC DEFAULT_MSG GR_DBFCTTC_LIBRARIES GR_DBFCTTC_INCLUDE_DIRS) if(GRDBFCTTC_FOUND AND NOT TARGET Gnuradio::dbfcttc) add_library(Gnuradio::dbfcttc SHARED IMPORTED) set_target_properties(Gnuradio::dbfcttc PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GR_DBFCTTC_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${GR_DBFCTTC_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${GR_DBFCTTC_LIBRARIES}" ) endif() mark_as_advanced(GR_DBFCTTC_LIBRARIES GR_DBFCTTC_INCLUDE_DIRS) gnss-sdr-0.0.20/cmake/Modules/FindGRIIO.cmake000066400000000000000000000051621477325711200205120ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # # Provides the following imported target: # Gnuradio::iio # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_IIO gnuradio-iio) if(NOT GRIIO_ROOT) set(GRIIO_ROOT_USER_DEFINED /usr) else() set(GRIIO_ROOT_USER_DEFINED ${GRIIO_ROOT}) endif() if(DEFINED ENV{GRIIO_ROOT}) set(GRIIO_ROOT_USER_DEFINED ${GRIIO_ROOT_USER_DEFINED} $ENV{GRIIO_ROOT} ) endif() if(DEFINED ENV{IIO_DIR}) set(GRIIO_ROOT_USER_DEFINED ${GRIIO_ROOT_USER_DEFINED} $ENV{IIO_DIR} ) endif() set(GRIIO_ROOT_USER_DEFINED ${GRIIO_ROOT_USER_DEFINED} ${CMAKE_INSTALL_PREFIX} ) find_path(IIO_INCLUDE_DIRS NAMES gnuradio/iio/api.h HINTS ${PC_IIO_INCLUDEDIR} PATHS ${GRIIO_ROOT_USER_DEFINED}/include ${GNSSSDR_INCLUDE_PATHS} ) if(IIO_INCLUDE_DIRS) set(GR_IIO_INCLUDE_HAS_GNURADIO TRUE) else() find_path(IIO_INCLUDE_DIRS NAMES iio/api.h HINTS ${PC_IIO_INCLUDEDIR} PATHS ${GRIIO_ROOT_USER_DEFINED}/include ${GNSSSDR_INCLUDE_PATHS} ) set(GR_IIO_INCLUDE_HAS_GNURADIO FALSE) endif() find_library(IIO_LIBRARIES NAMES gnuradio-iio HINTS ${PC_IIO_LIBDIR} PATHS ${GRIIO_ROOT_USER_DEFINED}/lib ${GRIIO_ROOT_USER_DEFINED}/lib64 ${GNSSSDR_LIB_PATHS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GRIIO DEFAULT_MSG IIO_LIBRARIES IIO_INCLUDE_DIRS) if(PC_IIO_VERSION) set(GRIIO_VERSION ${PC_IIO_VERSION}) endif() set_package_properties(GRIIO PROPERTIES URL "https://github.com/analogdevicesinc/gr-iio" ) if(GRIIO_FOUND AND GRIIO_VERSION) set_package_properties(GRIIO PROPERTIES DESCRIPTION "IIO blocks for GNU Radio (found: v${GRIIO_VERSION})" ) else() set_package_properties(GRIIO PROPERTIES DESCRIPTION "IIO blocks for GNU Radio" ) endif() if(GRIIO_FOUND AND NOT TARGET Gnuradio::iio) add_library(Gnuradio::iio SHARED IMPORTED) set_target_properties(Gnuradio::iio PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${IIO_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${IIO_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${IIO_LIBRARIES}" ) endif() mark_as_advanced(IIO_LIBRARIES IIO_INCLUDE_DIRS GR_IIO_INCLUDE_HAS_GNURADIO) gnss-sdr-0.0.20/cmake/Modules/FindGRLIMESDR.cmake000066400000000000000000000101761477325711200211720ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # Tries to find gr-limesdr. # # Usage of this module as follows: # # find_package(GRLIMESDR) # # Variables used by this module, they can change the default behaviour and need # to be set before calling find_package: # # GrLimeSDR_ROOT_DIR Set this variable to the root installation of # gr-limesdr if the module has problems finding # the proper installation path. # # Variables defined by this module: # # GRLIMESDR_FOUND System has gr-limesdr libs/headers # GRLIMESDR_LIBRARIES The gr-limesdr libraries (gnuradio-limesdr) # GRLIMESDR_INCLUDE_DIR The location of gr-limesdr headers # # Provides the following imported target: # Gnuradio::limesdr # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(GRLIMESDR_PKG QUIET gnuradio-limesdr) if(NOT GRLIMESDR_ROOT) set(GRLIMESDR_ROOT_USER_DEFINED /usr) else() set(GRLIMESDR_ROOT_USER_DEFINED ${GRLIMESDR_ROOT}) endif() if(DEFINED ENV{GRLIMESDR_ROOT}) set(GRLIMESDR_ROOT_USER_DEFINED ${GRLIMESDR_ROOT_USER_DEFINED} $ENV{GRLIMESDR_ROOT} ) endif() find_path(GRLIMESDR_INCLUDE_DIR NAMES limesdr/source.h limesdr/api.h HINTS ${GRLIMESDR_PKG_INCLUDEDIR} PATHS ${GRLIMESDR_ROOT_USER_DEFINED}/include ${GNSSSDR_INCLUDE_PATHS} ) find_library(GRLIMESDR_LIBRARIES NAMES gnuradio-limesdr HINTS ${GRLIMESDR_PKG_LIBDIR} PATHS ${GRLIMESDR_ROOT_USER_DEFINED}/lib ${GRLIMESDR_ROOT_USER_DEFINED}/lib64 ${GNSSSDR_LIB_PATHS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GRLIMESDR DEFAULT_MSG GRLIMESDR_LIBRARIES GRLIMESDR_INCLUDE_DIR) if(GRLIMESDR_PKG_VERSION) set(GRLIMESDR_VERSION_AUX ${GRLIMESDR_PKG_VERSION}) string(REGEX REPLACE "^v" "" GRLIMESDR_VERSION ${GRLIMESDR_VERSION_AUX}) endif() set_package_properties(GRLIMESDR PROPERTIES URL "https://github.com/myriadrf/gr-limesdr" ) if(GRLIMESDR_FOUND AND GRLIMESDR_VERSION) set_package_properties(GRLIMESDR PROPERTIES DESCRIPTION "LimeSDR GNU Radio blocks (found: v${GRLIMESDR_VERSION})" ) else() set_package_properties(GRLIMESDR PROPERTIES DESCRIPTION "LimeSDR GNU Radio blocks" ) endif() if(GRLIMESDR_FOUND AND NOT TARGET Gnuradio::limesdr) add_library(Gnuradio::limesdr SHARED IMPORTED) set_target_properties(Gnuradio::limesdr PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GRLIMESDR_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${GRLIMESDR_INCLUDE_DIR};${GRLIMESDR_INCLUDE_DIR}/limesdr" INTERFACE_LINK_LIBRARIES "${GRLIMESDR_LIBRARIES}" ) message(STATUS "The (optional) gr-limesdr module has been found.") # check for PPS custom version file(READ ${GRLIMESDR_INCLUDE_DIR}/limesdr/source.h TMPTXT) string(FIND "${TMPTXT}" "enable_PPS_mode" matchres) if(${matchres} EQUAL -1) message(STATUS " Using standard gr-limesdr library.") else() set(GRLIMESDR_PPS TRUE) message(STATUS " Using custom gr-limesdr library with PPS support.") endif() # check gr-limesdr branch set(_g38_branch TRUE) file(STRINGS ${GRLIMESDR_INCLUDE_DIR}/limesdr/source.h _limesdr_header_content) foreach(_loop_var IN LISTS _limesdr_header_content) string(STRIP "${_loop_var}" _file_line) if("static sptr make(std::string serial, int channel_mode, const std::string& filename);" STREQUAL "${_file_line}") set(_g38_branch FALSE) endif() if("make(std::string serial, int channel_mode, const std::string& filename, bool enable_PPS_mode);" STREQUAL "${_file_line}") set(_g38_branch FALSE) endif() endforeach() if(${_g38_branch}) set(GR_LIMESDR_IS_G38_BRANCH TRUE) endif() endif() mark_as_advanced(GRLIMESDR_LIBRARIES GRLIMESDR_INCLUDE_DIR) gnss-sdr-0.0.20/cmake/Modules/FindGROSMOSDR.cmake000066400000000000000000000057771477325711200212340ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # Tries to find gr-osmosdr. # # Usage of this module as follows: # # find_package(GROSMOSDR) # # Variables used by this module, they can change the default behaviour and need # to be set before calling find_package: # # GrOsmoSDR_ROOT_DIR Set this variable to the root installation of # gr-osmosdr if the module has problems finding # the proper installation path. # # Variables defined by this module: # # GROSMOSDR_FOUND System has gr-osmosdr libs/headers # GROSMOSDR_LIBRARIES The gr-osmosdr libraries (gnuradio-osmosdr) # GROSMOSDR_INCLUDE_DIR The location of gr-osmosdr headers # # Provides the following imported target: # Gnuradio::osmosdr # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(GROSMOSDR_PKG gnuradio-osmosdr) if(NOT GROSMOSDR_ROOT) set(GROSMOSDR_ROOT_USER_DEFINED /usr) else() set(GROSMOSDR_ROOT_USER_DEFINED ${GROSMOSDR_ROOT}) endif() if(DEFINED ENV{GROSMOSDR_ROOT}) set(GROSMOSDR_ROOT_USER_DEFINED ${GROSMOSDR_ROOT_USER_DEFINED} $ENV{GROSMOSDR_ROOT} ) endif() find_path(GROSMOSDR_INCLUDE_DIR NAMES osmosdr/source.h osmosdr/api.h HINTS ${GROSMOSDR_PKG_INCLUDEDIR} PATHS ${GROSMOSDR_ROOT_USER_DEFINED}/include ${GNSSSDR_INCLUDE_PATHS} ) find_library(GROSMOSDR_LIBRARIES NAMES gnuradio-osmosdr HINTS ${GROSMOSDR_PKG_LIBDIR} PATHS ${GROSMOSDR_ROOT_USER_DEFINED}/lib ${GROSMOSDR_ROOT_USER_DEFINED}/lib64 ${GNSSSDR_LIB_PATHS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GROSMOSDR DEFAULT_MSG GROSMOSDR_LIBRARIES GROSMOSDR_INCLUDE_DIR) if(GROSMOSDR_PKG_VERSION) set(GROSMOSDR_VERSION_AUX ${GROSMOSDR_PKG_VERSION}) string(REGEX REPLACE "^v" "" GROSMOSDR_VERSION ${GROSMOSDR_VERSION_AUX}) endif() set_package_properties(GROSMOSDR PROPERTIES URL "https://osmocom.org/projects/gr-osmosdr/wiki" ) if(GROSMOSDR_FOUND AND GROSMOSDR_VERSION) set_package_properties(GROSMOSDR PROPERTIES DESCRIPTION "osmocom GNU Radio blocks (found: v${GROSMOSDR_VERSION})" ) else() set_package_properties(GROSMOSDR PROPERTIES DESCRIPTION "osmocom GNU Radio blocks" ) endif() if(GROSMOSDR_FOUND AND NOT TARGET Gnuradio::osmosdr) add_library(Gnuradio::osmosdr SHARED IMPORTED) set_target_properties(Gnuradio::osmosdr PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${GROSMOSDR_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${GROSMOSDR_INCLUDE_DIR};${GROSMOSDR_INCLUDE_DIR}/osmosdr" INTERFACE_LINK_LIBRARIES "${GROSMOSDR_LIBRARIES}" ) endif() mark_as_advanced(GROSMOSDR_LIBRARIES GROSMOSDR_INCLUDE_DIR) gnss-sdr-0.0.20/cmake/Modules/FindLIBAD9361.cmake000066400000000000000000000051171477325711200207770ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # # Provides the following imported target: # Iio::ad9361 # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_LIBAD9361 libad9361) if(NOT LIBAD9361_ROOT) set(LIBAD9361_ROOT_USER_DEFINED /usr/local) else() set(LIBAD9361_ROOT_USER_DEFINED ${LIBAD9361_ROOT}) endif() if(DEFINED ENV{LIBAD9361_ROOT}) set(LIBAD9361_ROOT_USER_DEFINED ${LIBAD9361_ROOT_USER_DEFINED} $ENV{LIBAD9361_ROOT} ) endif() set(LIBAD9361_ROOT_USER_DEFINED ${LIBAD9361_ROOT_USER_DEFINED} ${CMAKE_INSTALL_PREFIX} ) find_path(LIBAD9361_INCLUDE_DIRS NAMES ad9361.h HINTS ${PC_LIBAD9361_INCLUDEDIR} PATHS ${LIBAD9361_ROOT_USER_DEFINED}/include ${GNSSSDR_INCLUDE_PATHS} ) find_library(LIBAD9361_LIBRARIES NAMES ad9361 HINTS ${PC_LIBAD9361_LIBDIR} PATHS ${LIBAD9361_ROOT_USER_DEFINED}/lib ${LIBAD9361_ROOT_USER_DEFINED}/lib64 ${GNSSSDR_LIB_PATHS} /Library/Frameworks/ad9361.framework ) if(LIBAD9361_LIBRARIES AND APPLE) if(LIBAD9361_LIBRARIES MATCHES "framework") set(LIBAD9361_LIBRARIES ${LIBAD9361_LIBRARIES}/ad9361) endif() endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LIBAD9361 DEFAULT_MSG LIBAD9361_LIBRARIES LIBAD9361_INCLUDE_DIRS) if(PC_LIBAD9361_VERSION) set(LIBAD9361_VERSION ${PC_LIBAD9361_VERSION}) endif() if(LIBAD9361_FOUND AND LIBAD9361_VERSION) set_package_properties(LIBAD9361 PROPERTIES DESCRIPTION "A library for interfacing with AD936X RF transceivers (found: v${LIBAD9361_VERSION})" ) else() set_package_properties(LIBAD9361 PROPERTIES DESCRIPTION "A library for interfacing with AD936X RF transceivers" ) endif() set_package_properties(LIBAD9361 PROPERTIES URL "https://github.com/analogdevicesinc/libad9361-iio" ) if(LIBAD9361_FOUND AND NOT TARGET Iio::ad9361) add_library(Iio::ad9361 SHARED IMPORTED) set_target_properties(Iio::ad9361 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${LIBAD9361_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${LIBAD9361_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${LIBAD9361_LIBRARIES}" ) endif() mark_as_advanced(LIBAD9361_LIBRARIES LIBAD9361_INCLUDE_DIRS) gnss-sdr-0.0.20/cmake/Modules/FindLIBIIO.cmake000066400000000000000000000046741477325711200206170ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # # Provides the following imported target: # Iio::iio # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_LIBIIO libiio) if(NOT LIBIIO_ROOT) set(LIBIIO_ROOT_USER_DEFINED /usr) else() set(LIBIIO_ROOT_USER_DEFINED ${LIBIIO_ROOT}) endif() if(DEFINED ENV{LIBIIO_ROOT}) set(LIBIIO_ROOT_USER_DEFINED ${LIBIIO_ROOT_USER_DEFINED} $ENV{LIBIIO_ROOT} ) endif() set(LIBIIO_ROOT_USER_DEFINED ${LIBIIO_ROOT_USER_DEFINED} ${CMAKE_INSTALL_PREFIX} ) find_path( LIBIIO_INCLUDE_DIRS NAMES iio.h HINTS ${PC_LIBIIO_INCLUDEDIR} PATHS ${LIBIIO_ROOT_USER_DEFINED}/include ${GNSSSDR_INCLUDE_PATHS} ) find_library( LIBIIO_LIBRARIES NAMES iio libiio.so.0 HINTS ${PC_LIBIIO_LIBDIR} PATHS ${LIBIIO_ROOT_USER_DEFINED}/lib ${LIBIIO_ROOT_USER_DEFINED}/lib64 ${GNSSSDR_LIB_PATHS} /Library/Frameworks/iio.framework/ ) if(LIBIIO_LIBRARIES AND APPLE) if(LIBIIO_LIBRARIES MATCHES "framework") set(LIBIIO_LIBRARIES ${LIBIIO_LIBRARIES}/iio) endif() endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LIBIIO DEFAULT_MSG LIBIIO_LIBRARIES LIBIIO_INCLUDE_DIRS) if(PC_LIBIIO_VERSION) set(LIBIIO_VERSION ${PC_LIBIIO_VERSION}) endif() if(LIBIIO_FOUND AND LIBIIO_VERSION) set_package_properties(LIBIIO PROPERTIES DESCRIPTION "A library for interfacing with Linux IIO devices (found: v${LIBIIO_VERSION})" ) else() set_package_properties(LIBIIO PROPERTIES DESCRIPTION "A library for interfacing with Linux IIO devices" ) endif() set_package_properties(LIBIIO PROPERTIES URL "https://github.com/analogdevicesinc/libiio" ) if(LIBIIO_FOUND AND NOT TARGET Iio::iio) add_library(Iio::iio SHARED IMPORTED) set_target_properties(Iio::iio PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${LIBIIO_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${LIBIIO_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${LIBIIO_LIBRARIES}" ) endif() mark_as_advanced(LIBIIO_LIBRARIES LIBIIO_INCLUDE_DIRS) gnss-sdr-0.0.20/cmake/Modules/FindLIBUNWIND.cmake000066400000000000000000000120021477325711200211630ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2022-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # Find the libunwind library # # LIBUNWIND_FOUND - True if libunwind was found. # LIBUNWIND_LIBRARIES - The libraries needed to use libunwind # LIBUNWIND_INCLUDE_DIR - Location of libunwind.h # INPUT (Optional): # LIBUNWIND_ROOT - path where include + lib of libunwind install is located if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() find_path(LIBUNWIND_INCLUDE_DIR NAMES libunwind.h unwind.h PATH_SUFFIXES include PATHS "${LIBUNWIND_ROOT}/include" ${GNSSSDR_INCLUDE_PATHS} ) find_library(LIBUNWIND_GENERIC_LIBRARY NAMES libunwind unwind PATHS "${LIBUNWIND_ROOT}/lib" "${LIBUNWIND_ROOT}/lib64" ${GNSSSDR_LIB_PATHS} ) if(LIBUNWIND_INCLUDE_DIR) if(LIBUNWIND_GENERIC_LIBRARY) set(LIBUNWIND_LIBRARIES ${LIBUNWIND_GENERIC_LIBRARY}) if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)") set(LIBUNWIND_ARCH "aarch64") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") set(LIBUNWIND_ARCH "arm") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64)|(AMD64|amd64)|(corei7-64)") set(LIBUNWIND_ARCH "x86_64") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$") set(LIBUNWIND_ARCH "x86") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64") set(LIBUNWIND_ARCH "ppc64") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc") set(LIBUNWIND_ARCH "ppc32") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips") set(LIBUNWIND_ARCH "mips") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^hppa") set(LIBUNWIND_ARCH "hppa") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^ia64") set(LIBUNWIND_ARCH "ia64") endif() if(LIBUNWIND_ARCH) find_library(LIBUNWIND_SPECIFIC_LIBRARY NAMES libunwind-${LIBUNWIND_ARCH} "unwind-${LIBUNWIND_ARCH}" PATHS "${LIBUNWIND_ROOT}" ${GNSSSDR_LIB_PATHS} ) if(NOT LIBUNWIND_SPECIFIC_LIBRARY) message(STATUS " -- Failed to find unwind-${LIBUNWIND_ARCH}") else() set(LIBUNWIND_LIBRARIES ${LIBUNWIND_LIBRARIES} ${LIBUNWIND_SPECIFIC_LIBRARY}) endif() endif() endif() else() message(STATUS " -- Could NOT find libunwind.h") endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LIBUNWIND DEFAULT_MSG LIBUNWIND_INCLUDE_DIR) if(LIBUNWIND_FOUND) set(_Unwind_VERSION_HEADER ${LIBUNWIND_INCLUDE_DIR}/libunwind-common.h) if(EXISTS ${_Unwind_VERSION_HEADER}) file(READ ${_Unwind_VERSION_HEADER} _Unwind_VERSION_CONTENTS) string(REGEX REPLACE ".*#define UNW_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" LIBUNWIND_VERSION_MAJOR "${_Unwind_VERSION_CONTENTS}") string(REGEX REPLACE ".*#define UNW_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" LIBUNWIND_VERSION_MINOR "${_Unwind_VERSION_CONTENTS}") string(REGEX REPLACE ".*#define UNW_VERSION_EXTRA[ \t]+([0-9]+).*" "\\1" LIBUNWIND_VERSION_PATCH "${_Unwind_VERSION_CONTENTS}") set(LIBUNWIND_VERSION ${LIBUNWIND_VERSION_MAJOR}.${LIBUNWIND_VERSION_MINOR}) if(CMAKE_MATCH_0) # Third version component may be empty set(LIBUNWIND_VERSION ${LIBUNWIND_VERSION}.${LIBUNWIND_VERSION_PATCH}) set(LIBUNWIND_VERSION_COMPONENTS 3) else() set(LIBUNWIND_VERSION_COMPONENTS 2) endif() endif() endif() if(LIBUNWIND_FOUND AND NOT TARGET Libunwind::libunwind) if(LIBUNWIND_GENERIC_LIBRARY) add_library(Libunwind::libunwind SHARED IMPORTED) set_target_properties(Libunwind::libunwind PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${LIBUNWIND_GENERIC_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${LIBUNWIND_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${LIBUNWIND_LIBRARIES}" ) else() add_library(Libunwind::libunwind INTERFACE IMPORTED) set_target_properties(Libunwind::libunwind PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBUNWIND_INCLUDE_DIR}" ) endif() endif() set_package_properties(LIBUNWIND PROPERTIES URL "https://www.nongnu.org/libunwind/" ) if(LIBUNWIND_VERSION) set_package_properties(LIBUNWIND PROPERTIES DESCRIPTION "Portable and efficient C programming interface to determine the call-chain of a program (found: v${LIBUNWIND_VERSION})" ) else() set_package_properties(LIBUNWIND PROPERTIES DESCRIPTION "Portable and efficient C programming interface to determine the call-chain of a program" ) endif() mark_as_advanced(LIBUNWIND_LIBRARIES LIBUNWIND_INCLUDE_DIR) gnss-sdr-0.0.20/cmake/Modules/FindLOG4CPP.cmake000066400000000000000000000075061477325711200207150ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # - Find Log4cpp # Find the native LOG4CPP includes and library # # LOG4CPP_INCLUDE_DIR - where to find LOG4CPP.h, etc. # LOG4CPP_LIBRARIES - List of libraries when using LOG4CPP. # LOG4CPP_FOUND - True if LOG4CPP found. # # Provides the following imported target: # Log4cpp::log4cpp # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_LOG4CPP log4cpp QUIET) if(LOG4CPP_INCLUDE_DIR) # Already in cache, be silent set(LOG4CPP_FIND_QUIETLY TRUE) endif() if(LOG4CPP_ROOT) set(LOG4CPP_ROOT_USER_PROVIDED ${LOG4CPP_ROOT}) else() set(LOG4CPP_ROOT_USER_PROVIDED /usr) endif() if(DEFINED ENV{LOG4CPP_ROOT}) set(LOG4CPP_ROOT_USER_PROVIDED ${LOG4CPP_ROOT_USER_PROVIDED} $ENV{LOG4CPP_ROOT} ) endif() set(LOG4CPP_ROOT_USER_PROVIDED ${LOG4CPP_ROOT_USER_PROVIDED} ${CMAKE_INSTALL_PREFIX} ) find_path(LOG4CPP_INCLUDE_DIR log4cpp/Category.hh ${LOG4CPP_ROOT_USER_PROVIDED}/include ${GNSSSDR_INCLUDE_PATHS} ${PC_LOG4CPP_INCLUDEDIR} ) if(LOG4CPP_INCLUDE_DIR) file(STRINGS ${LOG4CPP_INCLUDE_DIR}/log4cpp/Priority.hh _log4cpp_Priority) set(_log4cpp_cxx17 TRUE) foreach(_loop_var IN LISTS _log4cpp_Priority) string(STRIP "${_loop_var}" _file_line) if("throw(std::invalid_argument);" STREQUAL "${_file_line}") set(_log4cpp_cxx17 FALSE) endif() endforeach() if(${_log4cpp_cxx17}) set(LOG4CPP_READY_FOR_CXX17 TRUE) endif() endif() set(LOG4CPP_NAMES log4cpp) find_library(LOG4CPP_LIBRARY NAMES ${LOG4CPP_NAMES} HINTS ${PC_LOG4CPP_LIBDIR} PATHS ${LOG4CPP_ROOT_USER_PROVIDED}/lib ${LOG4CPP_ROOT_USER_PROVIDED}/lib64 ${GNSSSDR_LIB_PATHS} ) if(LOG4CPP_INCLUDE_DIR AND LOG4CPP_LIBRARY) set(LOG4CPP_FOUND TRUE) set(LOG4CPP_LIBRARIES ${LOG4CPP_LIBRARY} CACHE INTERNAL "" FORCE) set(LOG4CPP_INCLUDE_DIRS ${LOG4CPP_INCLUDE_DIR} CACHE INTERNAL "" FORCE) else() set(LOG4CPP_FOUND FALSE CACHE INTERNAL "" FORCE) set(LOG4CPP_LIBRARY "" CACHE INTERNAL "" FORCE) set(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE) set(LOG4CPP_INCLUDE_DIR "" CACHE INTERNAL "" FORCE) set(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LOG4CPP DEFAULT_MSG LOG4CPP_INCLUDE_DIRS LOG4CPP_LIBRARIES) set_package_properties(LOG4CPP PROPERTIES URL "https://log4cpp.sourceforge.net/" ) if(LOG4CPP_FOUND AND PC_LOG4CPP_VERSION) set(LOG4CPP_VERSION ${PC_LOG4CPP_VERSION}) endif() if(LOG4CPP_FOUND AND LOG4CPP_VERSION) if(LOG4CPP_READY_FOR_CXX17) set_package_properties(LOG4CPP PROPERTIES DESCRIPTION "Library of C++ classes for flexible logging (found: v${LOG4CPP_VERSION}, C++17-ready)" ) else() set_package_properties(LOG4CPP PROPERTIES DESCRIPTION "Library of C++ classes for flexible logging (found: v${LOG4CPP_VERSION})" ) endif() else() set_package_properties(LOG4CPP PROPERTIES DESCRIPTION "Library of C++ classes for flexible logging" ) endif() if(LOG4CPP_FOUND AND NOT TARGET Log4cpp::log4cpp) add_library(Log4cpp::log4cpp SHARED IMPORTED) set_target_properties(Log4cpp::log4cpp PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${LOG4CPP_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${LOG4CPP_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${LOG4CPP_LIBRARIES}" ) endif() mark_as_advanced(LOG4CPP_LIBRARIES LOG4CPP_INCLUDE_DIRS) gnss-sdr-0.0.20/cmake/Modules/FindMATHJAX2.cmake000066400000000000000000000030741477325711200210170ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # # # Find MathJax package (version 2). # # A hint can be provided by defining MATHJAX2_ROOT # (will succeed if ${MATHJAX2_ROOT}/MathJax.js is found). # # Alternatively, a path can be provided in MATHJAX2_USE_ROOT # so that ${MATHJAX2_USE_ROOT}/MathJax.js is used without # checking its existence. # This path could be a URL, an absolute local path or # a path relative to the generated HTML folder. # # Note that version 2 and 3 are incompatible # and doxygen requires version 2. # See: https://github.com/doxygen/doxygen/issues/7346 # # Defined variables: # - MATHJAX2_FOUND - True if MathJax found # - MATHJAX2_JS_PATH - Path to MathJax.js file # - MATHJAX2_PATH - Path to the MathJax root directory if(DEFINED MATHJAX2_USE_ROOT) set(MATHJAX2_FOUND TRUE) set(MATHJAX2_PATH "${MATHJAX2_USE_ROOT}/") set(MATHJAX2_JS_PATH "${MATHJAX2_USE_ROOT}/MathJax.js") else() find_file(MATHJAX2_JS_PATH NAMES MathJax.js PATHS "${MATHJAX2_ROOT}" /usr/share/mathjax2/ /usr/share/javascript/mathjax/ /usr/local/share/javascript/mathjax/ ) get_filename_component(MATHJAX2_PATH ${MATHJAX2_JS_PATH} DIRECTORY) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(MATHJAX2 DEFAULT_MSG MATHJAX2_JS_PATH) mark_as_advanced(MATHJAX2_JS_PATH) gnss-sdr-0.0.20/cmake/Modules/FindMATIO.cmake000066400000000000000000000130501477325711200205050ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # FindMATIO # # Try to find MATIO library # # Once done this will define: # # MATIO_FOUND - True if MATIO found. # MATIO_LIBRARIES - MATIO libraries. # MATIO_INCLUDE_DIRS - where to find matio.h, etc.. # MATIO_VERSION_STRING - version number as a string (e.g.: "1.3.4") # # Provides the following imported target: # Matio::matio # #============================================================================= # Copyright 2015 Avtech Scientific # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # * Neither the names of Kitware, Inc., the Insight Software Consortium, # nor the names of their contributors may be used to endorse or promote # products derived from this software without specific prior written # permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() if(NOT MATIO_ROOT) set(MATIO_ROOT_USER_DEFINED /usr) else() set(MATIO_ROOT_USER_DEFINED ${MATIO_ROOT}) endif() if(DEFINED ENV{MATIO_ROOT}) set(MATIO_ROOT_USER_DEFINED ${MATIO_ROOT_USER_DEFINED} $ENV{MATIO_ROOT} ) endif() # Look for the header file. find_path(MATIO_INCLUDE_DIR NAMES matio.h PATHS ${MATIO_ROOT_USER_DEFINED}/include ${GNSSSDR_INCLUDE_PATHS} ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include DOC "The MATIO include directory" ) # Look for the library. find_library(MATIO_LIBRARY NAMES matio libmatio PATHS ${MATIO_ROOT_USER_DEFINED}/lib ${MATIO_ROOT_USER_DEFINED}/lib64 ${GNSSSDR_LIB_PATHS} ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib DOC "The MATIO library" ) if(MATIO_INCLUDE_DIR) # --------------------------------------------------- # Extract version information from MATIO # --------------------------------------------------- # If the file is missing, set all values to 0 set(MATIO_MAJOR_VERSION 0) set(MATIO_MINOR_VERSION 0) set(MATIO_RELEASE_LEVEL 0) # new versions of MATIO have `matio_pubconf.h` if(EXISTS ${MATIO_INCLUDE_DIR}/matio_pubconf.h) set(MATIO_CONFIG_FILE "matio_pubconf.h") else() set(MATIO_CONFIG_FILE "matioConfig.h") endif() if(MATIO_CONFIG_FILE) # Read and parse MATIO config header file for version number file(STRINGS "${MATIO_INCLUDE_DIR}/${MATIO_CONFIG_FILE}" _matio_HEADER_CONTENTS REGEX "#define MATIO_((MAJOR|MINOR)_VERSION)|(RELEASE_LEVEL) ") foreach(line ${_matio_HEADER_CONTENTS}) if(line MATCHES "#define ([A-Z_]+) ([0-9]+)") set("${CMAKE_MATCH_1}" "${CMAKE_MATCH_2}") endif() endforeach() unset(_matio_HEADER_CONTENTS) endif() set(MATIO_VERSION_STRING "${MATIO_MAJOR_VERSION}.${MATIO_MINOR_VERSION}.${MATIO_RELEASE_LEVEL}") endif() mark_as_advanced(MATIO_INCLUDE_DIR MATIO_LIBRARY) # handle the QUIETLY and REQUIRED arguments and set MATIO_FOUND to TRUE if # all listed variables are TRUE include(FindPackageHandleStandardArgs) find_package_handle_standard_args(MATIO REQUIRED_VARS MATIO_LIBRARY MATIO_INCLUDE_DIR VERSION_VAR MATIO_VERSION_STRING) if(MATIO_FOUND) set(MATIO_LIBRARIES ${MATIO_LIBRARY}) set(MATIO_INCLUDE_DIRS ${MATIO_INCLUDE_DIR}) else() set(MATIO_LIBRARIES) set(MATIO_INCLUDE_DIRS) endif() if(MATIO_FOUND AND MATIO_VERSION_STRING) set_package_properties(MATIO PROPERTIES DESCRIPTION "MATLAB MAT File I/O Library (found: v${MATIO_VERSION_STRING})" ) else() set_package_properties(MATIO PROPERTIES DESCRIPTION "MATLAB MAT File I/O Library" ) endif() set_package_properties(MATIO PROPERTIES URL "https://github.com/tbeu/matio" ) if(MATIO_FOUND AND NOT TARGET Matio::matio) add_library(Matio::matio SHARED IMPORTED) set_target_properties(Matio::matio PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${MATIO_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${MATIO_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${MATIO_LIBRARY}" IMPORTED_IMPLIB "${MATIO_LIBRARY}" ) endif() gnss-sdr-0.0.20/cmake/Modules/FindOPENCL.cmake000066400000000000000000000135461477325711200206260ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # # - Try to find OpenCL # This module tries to find an OpenCL implementation on your system. It supports # AMD / ATI, Apple and NVIDIA implementations. # # Once done this will define # OPENCL_FOUND - system has OpenCL # OPENCL_INCLUDE_DIRS - the OpenCL include directory # OPENCL_LIBRARIES - link these to use OpenCL # # WIN32 should work, but is untested if(NOT COMMAND feature_summary) include(FeatureSummary) endif() include(FindPackageHandleStandardArgs) function(_FIND_OPENCL_VERSION) include(CheckSymbolExists) include(CMakePushCheckState) set(CMAKE_REQUIRED_QUIET ${OPENCL_FIND_QUIETLY}) cmake_push_check_state() foreach(VERSION "2_2" "2_1" "2_0" "1_2" "1_1" "1_0") set(CMAKE_REQUIRED_INCLUDES "${OPENCL_INCLUDE_DIR}") if(APPLE) check_symbol_exists( CL_VERSION_${VERSION} "${OPENCL_INCLUDE_DIR}/Headers/cl.h" OPENCL_VERSION_${VERSION} ) else() check_symbol_exists( CL_VERSION_${VERSION} "${OPENCL_INCLUDE_DIR}/CL/cl.h" OPENCL_VERSION_${VERSION} ) endif() if(OPENCL_VERSION_${VERSION}) string(REPLACE "_" "." VERSION "${VERSION}") set(OPENCL_VERSION_STRING ${VERSION} PARENT_SCOPE) string(REGEX MATCHALL "[0-9]+" version_components "${VERSION}") list(GET version_components 0 major_version) list(GET version_components 1 minor_version) set(OPENCL_VERSION_MAJOR ${major_version} PARENT_SCOPE) set(OPENCL_VERSION_MINOR ${minor_version} PARENT_SCOPE) break() endif() endforeach() cmake_pop_check_state() endfunction() find_path(OPENCL_INCLUDE_DIR NAMES CL/cl.h OpenCL/cl.h PATHS ENV "PROGRAMFILES(X86)" ENV AMDAPPSDKROOT ENV INTELOCLSDKROOT ENV NVSDKCOMPUTE_ROOT ENV CUDA_PATH ENV ATISTREAMSDKROOT ENV OCL_ROOT /usr/local/cuda/include PATH_SUFFIXES include OpenCL/common/inc "AMD APP/include" ) find_path(_OPENCL_CPP_INCLUDE_DIRS NAMES CL/cl.hpp OpenCL/cl.hpp PATHS ENV "PROGRAMFILES(X86)" ENV AMDAPPSDKROOT ENV INTELOCLSDKROOT ENV NVSDKCOMPUTE_ROOT ENV CUDA_PATH ENV ATISTREAMSDKROOT ENV OCL_ROOT /usr/local/cuda/include PATH_SUFFIXES include OpenCL/common/inc "AMD APP/include" ) set(OPENCL_INCLUDE_DIRS ${OPENCL_INCLUDE_DIR}) if(_OPENCL_CPP_INCLUDE_DIRS) set(OPENCL_HAS_CPP_BINDINGS TRUE) list(APPEND OPENCL_INCLUDE_DIRS ${_OPENCL_CPP_INCLUDE_DIRS}) # This is often the same, so clean up list(REMOVE_DUPLICATES OPENCL_INCLUDE_DIRS) endif() _find_opencl_version() if(WIN32) if(CMAKE_SIZEOF_VOID_P EQUAL 4) find_library(OPENCL_LIBRARY NAMES OpenCL PATHS ENV "PROGRAMFILES(X86)" ENV AMDAPPSDKROOT ENV INTELOCLSDKROOT ENV CUDA_PATH ENV NVSDKCOMPUTE_ROOT ENV ATISTREAMSDKROOT ENV OCL_ROOT PATH_SUFFIXES "AMD APP/lib/x86" lib/x86 lib/Win32 OpenCL/common/lib/Win32 ) elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) find_library(OPENCL_LIBRARY NAMES OpenCL PATHS ENV "PROGRAMFILES(X86)" ENV AMDAPPSDKROOT ENV INTELOCLSDKROOT ENV CUDA_PATH ENV NVSDKCOMPUTE_ROOT ENV ATISTREAMSDKROOT ENV OCL_ROOT PATH_SUFFIXES "AMD APP/lib/x86_64" lib/x86_64 lib/x64 OpenCL/common/lib/x64 ) endif() else() if(CMAKE_SIZEOF_VOID_P EQUAL 4) find_library(OPENCL_LIBRARY NAMES OpenCL PATHS ENV AMDAPPSDKROOT ENV CUDA_PATH ENV LD_LIBRARY_PATH PATH_SUFFIXES lib/x86 lib ) elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) find_library(OPENCL_LIBRARY NAMES OpenCL PATHS ENV AMDAPPSDKROOT ENV CUDA_PATH ENV LD_LIBRARY_PATH PATH_SUFFIXES lib/x86_64 lib/x64 lib lib64 ) endif() endif() set(OPENCL_LIBRARIES ${OPENCL_LIBRARY}) find_package_handle_standard_args(OPENCL DEFAULT_MSG OPENCL_LIBRARIES OPENCL_INCLUDE_DIRS) mark_as_advanced( OPENCL_INCLUDE_DIRS OPENCL_LIBRARIES ) set_package_properties(OPENCL PROPERTIES URL "https://www.khronos.org/opencl/" ) if(OPENCL_FOUND AND OPENCL_VERSION_STRING) set_package_properties(OPENCL PROPERTIES DESCRIPTION "Library for parallel programming (found: v${OPENCL_VERSION_STRING})" ) else() set_package_properties(OPENCL PROPERTIES DESCRIPTION "Library for parallel programming" ) endif() if(OPENCL_FOUND AND NOT TARGET OpenCL::OpenCL) if(OPENCL_LIBRARY MATCHES "/([^/]+)\\.framework$") add_library(OpenCL::OpenCL INTERFACE IMPORTED) set_target_properties(OpenCL::OpenCL PROPERTIES INTERFACE_LINK_LIBRARIES "${OPENCL_LIBRARY}" ) else() add_library(OpenCL::OpenCL UNKNOWN IMPORTED) set_target_properties(OpenCL::OpenCL PROPERTIES IMPORTED_LOCATION "${OPENCL_LIBRARY}" ) endif() set_target_properties(OpenCL::OpenCL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${OPENCL_INCLUDE_DIRS}" ) endif() gnss-sdr-0.0.20/cmake/Modules/FindORC.cmake000066400000000000000000000055771477325711200202760ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause if(DEFINED __INCLUDED_GNSSSDR_CMAKE_FIND_ORC) return() endif() set(__INCLUDED_GNSSSDR_CMAKE_FIND_ORC TRUE) if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_ORC "orc-0.4 > 0.4.22") if(NOT ORC_ROOT) set(ORC_ROOT_USER_PROVIDED /usr/local) else() set(ORC_ROOT_USER_PROVIDED ${ORC_ROOT}) endif() if(DEFINED ENV{ORC_ROOT}) set(ORC_ROOT_USER_PROVIDED ${ORC_ROOT_USER_PROVIDED} $ENV{ORC_ROOT} ) endif() set(ORC_ROOT_USER_PROVIDED ${ORC_ROOT_USER_PROVIDED} ${CMAKE_INSTALL_PREFIX} ) if(PC_ORC_TOOLSDIR) set(ORC_ROOT_USER_PROVIDED ${ORC_ROOT_USER_PROVIDED} ${PC_ORC_TOOLSDIR} ) endif() find_program(ORCC_EXECUTABLE orcc HINTS ${ORC_ROOT_USER_PROVIDED}/bin PATHS ${CMAKE_SYSTEM_PREFIX_PATH}/bin ) find_path(ORC_INCLUDE_DIR NAMES orc/orc.h HINTS ${PC_ORC_INCLUDEDIR} PATHS ${ORC_ROOT_USER_PROVIDED}/include ${GNSSSDR_INCLUDE_PATHS} PATH_SUFFIXES orc-0.4 ) find_path(ORC_LIBRARY_DIR NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}orc-0.4${CMAKE_SHARED_LIBRARY_SUFFIX} HINTS ${PC_ORC_LIBDIR} PATHS ${ORC_ROOT_USER_PROVIDED}/lib ${ORC_ROOT_USER_PROVIDED}/lib64 ${GNSSSDR_LIB_PATHS} ) find_library(ORC_LIB orc-0.4 HINTS ${PC_ORC_LIBRARY_DIRS} PATHS ${ORC_ROOT_USER_PROVIDED}/lib ${ORC_ROOT_USER_PROVIDED}/lib64 ${GNSSSDR_LIB_PATHS} ) find_library(ORC_LIBRARY_STATIC ${CMAKE_STATIC_LIBRARY_PREFIX}orc-0.4${CMAKE_STATIC_LIBRARY_SUFFIX} HINTS ${PC_ORC_LIBRARY_DIRS} PATHS ${ORC_ROOT}/lib ${ORC_ROOT}/lib64 ${ORC_ROOT_USER_PROVIDED}/lib ${ORC_ROOT_USER_PROVIDED}/lib64 ${GNSSSDR_LIB_PATHS} ) if(PC_ORC_VERSION) set(ORC_VERSION ${PC_ORC_VERSION}) endif() list(APPEND ORC_LIBRARY ${ORC_LIB}) set(ORC_INCLUDE_DIRS ${ORC_INCLUDE_DIR}) set(ORC_LIBRARIES ${ORC_LIBRARY}) set(ORC_LIBRARY_DIRS ${ORC_LIBRARY_DIR}) set(ORC_LIBRARIES_STATIC ${ORC_LIBRARY_STATIC}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(ORC "orc files" ORC_LIBRARY ORC_INCLUDE_DIR ORCC_EXECUTABLE) set_package_properties(ORC PROPERTIES URL "https://gstreamer.freedesktop.org/modules/orc.html" ) if(ORC_FOUND AND ORC_VERSION) set_package_properties(ORC PROPERTIES DESCRIPTION "The Optimized Inner Loops Runtime Compiler (found: v${ORC_VERSION})" ) else() set_package_properties(ORC PROPERTIES DESCRIPTION "The Optimized Inner Loops Runtime Compiler" ) endif() mark_as_advanced(ORC_INCLUDE_DIR ORC_LIBRARY ORCC_EXECUTABLE) gnss-sdr-0.0.20/cmake/Modules/FindPCAP.cmake000066400000000000000000000105241477325711200203620ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2006 Frederic Heem, # SPDX-License-Identifier: BSD-3-Clause # - Find pcap # Find the PCAP includes and library # https://www.tcpdump.org/ # # The environment variable PCAPDIR allows to specify where to find # libpcap in non standard location. # # PCAP_INCLUDE_DIRS - where to find pcap.h, etc. # PCAP_LIBRARIES - List of libraries when using pcap. # PCAP_FOUND - True if pcap found. # # Provides the following imported target: # Pcap::pcap # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_PCAP libpcap QUIET) if(NOT PCAP_ROOT) set(PCAP_ROOT_USER_PROVIDED /usr) else() set(PCAP_ROOT_USER_PROVIDED ${PCAP_ROOT}) endif() if(DEFINED ENV{PCAP_ROOT}) set(PCAP_ROOT_USER_PROVIDED ${PCAP_ROOT_USER_PROVIDED} $ENV{PCAP_ROOT} ) endif() if(DEFINED ENV{PCAPDIR}) set(PCAP_ROOT_USER_PROVIDED ${PCAP_ROOT_USER_PROVIDED} $ENV{PCAPDIR}) endif() if(DEFINED ENV{PCAPDIR}) find_path(PCAP_INCLUDE_DIR NAMES pcap/pcap.h pcap.h HINTS ${PC_PCAP_INCLUDEDIR} PATHS ${PCAP_ROOT_USER_PROVIDED} ${PCAP_ROOT_USER_PROVIDED}/include NO_DEFAULT_PATH ) find_library(PCAP_LIBRARY NAMES pcap HINTS ${PC_PCAP_LIBDIR} PATHS ${PCAP_ROOT_USER_PROVIDED} ${PCAP_ROOT_USER_PROVIDED}/lib NO_DEFAULT_PATH ) else() find_path(PCAP_INCLUDE_DIR NAMES pcap/pcap.h pcap.h HINTS ${PC_PCAP_INCLUDEDIR} PATHS ${PCAP_ROOT_USER_PROVIDED}/include ${GNSSSDR_INCLUDE_PATHS} ) find_library(PCAP_LIBRARY NAMES pcap HINTS ${PC_PCAP_LIBDIR} PATHS ${PCAP_ROOT_USER_PROVIDED}/lib ${GNSSSDR_LIB_PATHS} ) endif() set(PCAP_INCLUDE_DIRS ${PCAP_INCLUDE_DIR}) set(PCAP_LIBRARIES ${PCAP_LIBRARY}) if(PCAP_INCLUDE_DIRS) message(STATUS "Pcap include dirs set to ${PCAP_INCLUDE_DIRS}") else() message(STATUS "Pcap include dirs cannot be found.") endif() if(PCAP_LIBRARIES) message(STATUS "Pcap library set to ${PCAP_LIBRARIES}") else() message(STATUS "Pcap library cannot be found.") endif() #Functions include(CheckFunctionExists) set(CMAKE_REQUIRED_INCLUDES ${PCAP_INCLUDE_DIRS}) set(CMAKE_REQUIRED_LIBRARIES ${PCAP_LIBRARIES}) check_function_exists("pcap_breakloop" HAVE_PCAP_BREAKLOOP) check_function_exists("pcap_datalink_name_to_val" HAVE_PCAP_DATALINK_NAME_TO_VAL) check_function_exists("pcap_datalink_val_to_name" HAVE_PCAP_DATALINK_VAL_TO_NAME) check_function_exists("pcap_findalldevs" HAVE_PCAP_FINDALLDEVS) check_function_exists("pcap_freecode" HAVE_PCAP_FREECODE) check_function_exists("pcap_get_selectable_fd" HAVE_PCAP_GET_SELECTABLE_FD) check_function_exists("pcap_lib_version" HAVE_PCAP_LIB_VERSION) check_function_exists("pcap_list_datalinks" HAVE_PCAP_LIST_DATALINKS) check_function_exists("pcap_open_dead" HAVE_PCAP_OPEN_DEAD) check_function_exists("pcap_set_datalink" HAVE_PCAP_SET_DATALINK) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(PCAP DEFAULT_MSG PCAP_INCLUDE_DIRS PCAP_LIBRARIES) if(PCAP_FOUND AND PC_PCAP_VERSION) set(PCAP_VERSION ${PC_PCAP_VERSION}) endif() set_package_properties(PCAP PROPERTIES URL "https://www.tcpdump.org" ) if(PCAP_FOUND AND PCAP_VERSION) set_package_properties(PCAP PROPERTIES DESCRIPTION "A portable C/C++ library for network traffic capture (found: v${PCAP_VERSION})" ) else() set_package_properties(PCAP PROPERTIES DESCRIPTION "A portable C/C++ library for network traffic capture" ) endif() if(PCAP_FOUND AND NOT TARGET Pcap::pcap) add_library(Pcap::pcap SHARED IMPORTED) set_target_properties(Pcap::pcap PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${PCAP_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${PCAP_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${PCAP_LIBRARIES}" ) endif() mark_as_advanced(PCAP_LIBRARIES PCAP_INCLUDE_DIRS) gnss-sdr-0.0.20/cmake/Modules/FindPUGIXML.cmake000066400000000000000000000070151477325711200207650ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # Find the pugixml XML parsing library. # # Sets the usual variables expected for find_package scripts: # # PUGIXML_INCLUDE_DIR - header location # PUGIXML_LIBRARIES - library to link against # PUGIXML_FOUND - true if pugixml was found. # # Provides the following imported target: # Pugixml::pugixml # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_PUGIXML pugixml QUIET) if(NOT PUGIXML_ROOT) set(PUGIXML_ROOT_USER_DEFINED /usr) else() set(PUGIXML_ROOT_USER_DEFINED ${PUGIXML_ROOT}) endif() if(DEFINED ENV{PUGIXML_ROOT}) set(PUGIXML_ROOT_USER_DEFINED ${PUGIXML_ROOT_USER_DEFINED} $ENV{PUGIXML_ROOT} ) endif() if(PUGIXML_HOME) set(PUGIXML_ROOT_USER_DEFINED ${PUGIXML_ROOT_USER_DEFINED} ${PUGIXML_HOME} ) endif() find_path(PUGIXML_INCLUDE_DIR NAMES pugixml.hpp HINTS ${PC_PUGIXML_INCLUDEDIR} PATHS ${PUGIXML_ROOT_USER_DEFINED}/include ${PUGIXML_ROOT_USER_DEFINED}/include/pugixml-${PC_PUGIXML_VERSION} ${PUGIXML_ROOT_USER_DEFINED}/include/pugixml-1.9 ${GNSSSDR_INCLUDE_PATHS} ${GNSSSDR_INCLUDE_PATHS}/pugixml-${PC_PUGIXML_VERSION} ${GNSSSDR_INCLUDE_PATHS}/pugixml-1.9 ) find_library(PUGIXML_LIBRARY NAMES pugixml HINTS ${PC_PUGIXML_LIBDIR} PATHS ${PUGIXML_ROOT_USER_DEFINED}/lib ${PUGIXML_ROOT_USER_DEFINED}/lib64 ${PUGIXML_ROOT_USER_DEFINED}/lib/pugixml-${PC_PUGIXML_VERSION} ${PUGIXML_ROOT_USER_DEFINED}/lib64/pugixml-${PC_PUGIXML_VERSION} ${PUGIXML_ROOT_USER_DEFINED}}/lib/pugixml-1.9 ${PUGIXML_ROOT_USER_DEFINED}/lib64/pugixml-1.9 ${GNSSSDR_LIB_PATHS} ${GNSSSDR_LIB_PATHS}/pugixml-${PC_PUGIXML_VERSION} ${GNSSSDR_LIB_PATHS}/pugixml-1.9 ) # Support the REQUIRED and QUIET arguments, and set PUGIXML_FOUND if found. include(FindPackageHandleStandardArgs) find_package_handle_standard_args(PUGIXML DEFAULT_MSG PUGIXML_LIBRARY PUGIXML_INCLUDE_DIR) if(PUGIXML_FOUND) set(PUGIXML_LIBRARIES ${PUGIXML_LIBRARY}) if(NOT PUGIXML_FIND_QUIETLY) message(STATUS "PugiXML include = ${PUGIXML_INCLUDE_DIR}") message(STATUS "PugiXML library = ${PUGIXML_LIBRARY}") endif() if(PC_PUGIXML_VERSION) set(PUGIXML_VERSION ${PC_PUGIXML_VERSION}) endif() else() message(STATUS "PugiXML not found.") endif() set_package_properties(PUGIXML PROPERTIES URL "https://pugixml.org/" ) if(PUGIXML_FOUND AND PUGIXML_VERSION) set_package_properties(PUGIXML PROPERTIES DESCRIPTION "Light-weight, simple and fast XML parser for C++ (found: v${PUGIXML_VERSION})" ) else() set_package_properties(PUGIXML PROPERTIES DESCRIPTION "Light-weight, simple and fast XML parser for C++" ) endif() mark_as_advanced(PUGIXML_LIBRARY PUGIXML_INCLUDE_DIR) if(PUGIXML_FOUND AND NOT TARGET Pugixml::pugixml) add_library(Pugixml::pugixml SHARED IMPORTED) set_target_properties(Pugixml::pugixml PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${PUGIXML_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${PUGIXML_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${PUGIXML_LIBRARY}" ) endif() gnss-sdr-0.0.20/cmake/Modules/FindTELEORBIT.cmake000066400000000000000000000056311477325711200211730ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # # Provides the following imported target: # Gnuradio::teleorbit # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_TELEORBIT teleorbit QUIET) if(NOT TELEORBIT_ROOT) set(TELEORBIT_ROOT_USER_DEFINED /usr/local) else() set(TELEORBIT_ROOT_USER_DEFINED ${TELEORBIT_ROOT}) endif() if(DEFINED ENV{TELEORBIT_ROOT}) set(TELEORBIT_ROOT_USER_DEFINED ${TELEORBIT_ROOT_USER_DEFINED} $ENV{TELEORBIT_ROOT} ) endif() set(TELEORBIT_ROOT_USER_DEFINED ${TELEORBIT_ROOT_USER_DEFINED} ${CMAKE_INSTALL_PREFIX} ) find_path(TELEORBIT_INCLUDE_DIRS NAMES teleorbit/api.h HINTS ${PC_TELEORBIT_INCLUDEDIR} PATH_SUFFIXES gnuradio PATHS ${TELEORBIT_ROOT_USER_DEFINED}/include ${GNSSSDR_INCLUDE_PATHS} ) find_library(TELEORBIT_LIBRARIES NAMES gnuradio-teleorbit HINTS ${PC_TELEORBIT_LIBDIR} PATHS ${TELEORBIT_ROOT_USER_DEFINED}/lib ${TELEORBIT_ROOT_USER_DEFINED}/lib64 ${GNSSSDR_LIB_PATHS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(TELEORBIT DEFAULT_MSG TELEORBIT_LIBRARIES TELEORBIT_INCLUDE_DIRS) if(PC_TELEORBIT_VERSION) set(TELEORBIT_VERSION ${PC_TELEORBIT_VERSION}) endif() if(NOT TELEORBIT_VERSION) set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION}) unset(PACKAGE_VERSION) list(GET TELEORBIT_LIBRARIES 0 FIRST_DIR) get_filename_component(TELEORBIT_LIBRARIES_DIR ${FIRST_DIR} DIRECTORY) if(EXISTS ${TELEORBIT_LIBRARIES_DIR}/cmake/teleorbit/TeleorbitConfigVersion.cmake) include(${TELEORBIT_LIBRARIES_DIR}/cmake/teleorbit/TeleorbitConfigVersion.cmake) endif() if(PACKAGE_VERSION) set(TELEORBIT_VERSION ${PACKAGE_VERSION}) endif() set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION}) endif() if(TELEORBIT_FOUND AND TELEORBIT_VERSION) set_package_properties(TELEORBIT PROPERTIES DESCRIPTION "The Teleorbit's Flexiband GNU Radio block (found: v${TELEORBIT_VERSION})" ) else() set_package_properties(TELEORBIT PROPERTIES DESCRIPTION "The Teleorbit's Flexiband GNU Radio block." ) endif() if(TELEORBIT_FOUND AND NOT TARGET Gnuradio::teleorbit) add_library(Gnuradio::teleorbit SHARED IMPORTED) set_target_properties(Gnuradio::teleorbit PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${TELEORBIT_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${TELEORBIT_INCLUDE_DIRS};${TELEORBIT_INCLUDE_DIRS}/teleorbit" INTERFACE_LINK_LIBRARIES "${TELEORBIT_LIBRARIES}" ) endif() mark_as_advanced(TELEORBIT_LIBRARIES TELEORBIT_INCLUDE_DIRS) gnss-sdr-0.0.20/cmake/Modules/FindUHD.cmake000066400000000000000000000057131477325711200202630ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # # Provides the following imported target: # Uhd::uhd # ######################################################################## # Find the library for the USRP Hardware Driver ######################################################################## if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_UHD uhd) if(NOT UHD_ROOT) set(UHD_ROOT_USER_PROVIDED /usr/local) else() set(UHD_ROOT_USER_PROVIDED ${UHD_ROOT}) endif() if(GNURADIO_INSTALL_PREFIX) set(UHD_ROOT_USER_PROVIDED ${UHD_ROOT_USER_PROVIDED} ${GNURADIO_INSTALL_PREFIX} ) endif() if(DEFINED ENV{UHD_ROOT}) set(UHD_ROOT_USER_PROVIDED ${UHD_ROOT_USER_PROVIDED} $ENV{UHD_ROOT} ) endif() if(DEFINED ENV{UHD_DIR}) set(UHD_ROOT_USER_PROVIDED ${UHD_ROOT_USER_PROVIDED} $ENV{UHD_DIR} ) endif() find_path(UHD_INCLUDE_DIRS NAMES uhd/config.hpp HINTS ${PC_UHD_INCLUDEDIR} PATHS ${UHD_ROOT_USER_PROVIDED}/include ${GNSSSDR_INCLUDE_PATHS} ) find_library(UHD_LIBRARIES NAMES uhd HINTS ${PC_UHD_LIBDIR} PATHS ${UHD_ROOT_USER_PROVIDED}/lib ${UHD_ROOT_USER_PROVIDED}/lib64 ${GNSSSDR_LIB_PATHS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(UHD DEFAULT_MSG UHD_LIBRARIES UHD_INCLUDE_DIRS) if(PC_UHD_VERSION) set(UHD_VERSION ${PC_UHD_VERSION}) endif() if(NOT PC_UHD_VERSION) set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION}) unset(PACKAGE_VERSION) list(GET UHD_LIBRARIES 0 FIRST_DIR) get_filename_component(UHD_LIBRARIES_DIR ${FIRST_DIR} DIRECTORY) if(EXISTS ${UHD_LIBRARIES_DIR}/cmake/uhd/UHDConfigVersion.cmake) include(${UHD_LIBRARIES_DIR}/cmake/uhd/UHDConfigVersion.cmake) endif() if(PACKAGE_VERSION) set(UHD_VERSION ${PACKAGE_VERSION}) endif() set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION}) endif() set_package_properties(UHD PROPERTIES URL "https://www.ettus.com/sdr-software/uhd-usrp-hardware-driver/" ) if(UHD_FOUND AND UHD_VERSION) set_package_properties(UHD PROPERTIES DESCRIPTION "USRP Hardware Driver (found: v${UHD_VERSION})" ) else() set_package_properties(UHD PROPERTIES DESCRIPTION "USRP Hardware Driver" ) endif() if(UHD_FOUND AND NOT TARGET Uhd::uhd) add_library(Uhd::uhd SHARED IMPORTED) set_target_properties(Uhd::uhd PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${UHD_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${UHD_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${UHD_LIBRARIES}" ) endif() mark_as_advanced(UHD_LIBRARIES UHD_INCLUDE_DIRS) gnss-sdr-0.0.20/cmake/Modules/FindVOLK.cmake000066400000000000000000000064111477325711200204120ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # # Provides the following imported target: # Volk::volk # ######################################################################## # Find VOLK (Vector-Optimized Library of Kernels) ######################################################################## if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_VOLK volk QUIET) if(NOT VOLK_ROOT) set(VOLK_ROOT_USER_PROVIDED /usr) else() set(VOLK_ROOT_USER_PROVIDED ${VOLK_ROOT}) endif() if(DEFINED ENV{VOLK_ROOT}) set(VOLK_ROOT_USER_PROVIDED ${VOLK_ROOT_USER_PROVIDED} $ENV{VOLK_ROOT} ) endif() if(DEFINED ENV{VOLK_DIR}) set(VOLK_ROOT_USER_PROVIDED ${VOLK_ROOT_USER_PROVIDED} $ENV{VOLK_DIR} ) endif() set(VOLK_ROOT_USER_PROVIDED ${VOLK_ROOT_USER_PROVIDED} ${CMAKE_INSTALL_PREFIX} ) find_path(VOLK_INCLUDE_DIRS NAMES volk/volk.h HINTS ${PC_VOLK_INCLUDEDIR} PATHS ${VOLK_ROOT_USER_PROVIDED}/include ${GNSSSDR_INCLUDE_PATHS} ) find_library(VOLK_LIBRARIES NAMES volk HINTS ${PC_VOLK_LIBDIR} PATHS ${VOLK_ROOT_USER_PROVIDED}/lib ${VOLK_ROOT_USER_PROVIDED}/lib64 ${GNSSSDR_LIB_PATHS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS) if(PC_VOLK_VERSION) set(VOLK_VERSION ${PC_VOLK_VERSION}) endif() if(NOT VOLK_VERSION) set(OLD_PACKAGE_VERSION ${PACKAGE_VERSION}) unset(PACKAGE_VERSION) list(GET VOLK_LIBRARIES 0 FIRST_DIR) get_filename_component(VOLK_LIB_DIR ${FIRST_DIR} DIRECTORY) if(EXISTS ${VOLK_LIB_DIR}/cmake/volk/VolkConfigVersion.cmake) set(PACKAGE_FIND_VERSION_MAJOR 0) include(${VOLK_LIB_DIR}/cmake/volk/VolkConfigVersion.cmake) endif() if(PACKAGE_VERSION) set(VOLK_VERSION ${PACKAGE_VERSION}) endif() set(PACKAGE_VERSION ${OLD_PACKAGE_VERSION}) endif() set_package_properties(VOLK PROPERTIES URL "https://www.libvolk.org" ) if(VOLK_FOUND AND VOLK_VERSION) set_package_properties(VOLK PROPERTIES DESCRIPTION "Vector-Optimized Library of Kernels (found: v${VOLK_VERSION})" ) else() set_package_properties(VOLK PROPERTIES DESCRIPTION "Vector-Optimized Library of Kernels" ) endif() mark_as_advanced(VOLK_LIBRARIES VOLK_INCLUDE_DIRS VOLK_VERSION) if(NOT ORC_FOUND) find_package(ORC QUIET) endif() if(ORC_LIBRARIES_STATIC) set(VOLK_LINK_LIBRARIES ${VOLK_LIBRARIES} ${ORC_LIBRARIES_STATIC}) set(VOLK_INCLUDE_DIRS ${VOLK_INCLUDE_DIRS} ${ORC_INCLUDE_DIRS}) else() set(VOLK_LINK_LIBRARIES ${VOLK_LIBRARIES}) endif() if(VOLK_FOUND AND NOT TARGET Volk::volk) add_library(Volk::volk SHARED IMPORTED) set_target_properties(Volk::volk PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${VOLK_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${VOLK_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${VOLK_LINK_LIBRARIES}" ) endif() gnss-sdr-0.0.20/cmake/Modules/FindVOLKGNSSSDR.cmake000066400000000000000000000062421477325711200214600ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # # Provides the following imported target: # Volkgnsssdr::volkgnsssdr # ######################################################################## # Find VOLK (Vector-Optimized Library of Kernels) GNSS-SDR library ######################################################################## if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() pkg_check_modules(PC_VOLK_GNSSSDR QUIET volk_gnsssdr) if(NOT VOLKGNSSSDR_ROOT) set(VOLKGNSSSDR_ROOT_USER_PROVIDED /usr/local) else() set(VOLKGNSSSDR_ROOT_USER_PROVIDED ${VOLKGNSSSDR_ROOT}) endif() if(DEFINED ENV{VOLKGNSSSDR_ROOT}) set(VOLKGNSSSDR_ROOT_USER_PROVIDED ${VOLKGNSSSDR_ROOT_USER_PROVIDED} $ENV{VOLKGNSSSDR_ROOT} ) endif() if(DEFINED ENV{VOLK_GNSSSDR_DIR}) set(VOLKGNSSSDR_ROOT_USER_PROVIDED ${VOLKGNSSSDR_ROOT_USER_PROVIDED} $ENV{VOLK_GNSSSDR_DIR} ) endif() if(GNURADIO_INSTALL_PREFIX) set(VOLKGNSSSDR_ROOT_USER_PROVIDED ${VOLKGNSSSDR_ROOT_USER_PROVIDED} ${GNURADIO_INSTALL_PREFIX} ) endif() find_path(VOLK_GNSSSDR_INCLUDE_DIRS NAMES volk_gnsssdr/volk_gnsssdr.h HINTS ${PC_VOLK_GNSSSDR_INCLUDEDIR} PATHS ${VOLKGNSSSDR_ROOT_USER_PROVIDED}/include ${GNSSSDR_INCLUDE_PATHS} ) find_library(VOLK_GNSSSDR_LIBRARIES NAMES volk_gnsssdr HINTS ${PC_VOLK_GNSSSDR_LIBDIR} PATHS ${VOLKGNSSSDR_ROOT_USER_PROVIDED}/lib ${VOLKGNSSSDR_ROOT_USER_PROVIDED}/lib64 ${GNSSSDR_LIB_PATHS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(VOLKGNSSSDR DEFAULT_MSG VOLK_GNSSSDR_LIBRARIES VOLK_GNSSSDR_INCLUDE_DIRS) mark_as_advanced(VOLK_GNSSSDR_LIBRARIES VOLK_GNSSSDR_INCLUDE_DIRS) if(PC_VOLK_GNSSSDR_VERSION) set(VOLKGNSSSDR_VERSION ${PC_VOLK_GNSSSDR_VERSION}) endif() if(VOLKGNSSSDR_FOUND AND VOLKGNSSSDR_VERSION) set_package_properties(VOLKGNSSSDR PROPERTIES DESCRIPTION "Vector-Optimized Library of Kernels for GNSS-SDR (found: v${VOLKGNSSSDR_VERSION})." ) else() set_package_properties(VOLKGNSSSDR PROPERTIES DESCRIPTION "Vector-Optimized Library of Kernels for GNSS-SDR." ) endif() if(NOT ORC_FOUND) find_package(ORC QUIET) endif() if(ORC_FOUND) set(VOLK_GNSSSDR_LINK_LIBRARIES ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES}) set(VOLK_GNSSSDR_INCLUDE_DIRS ${VOLK_GNSSSDR_INCLUDE_DIRS} ${ORC_INCLUDE_DIRS}) else() set(VOLK_GNSSSDR_LINK_LIBRARIES ${VOLK_GNSSSDR_LIBRARIES}) endif() if(VOLKGNSSSDR_FOUND AND NOT TARGET Volkgnsssdr::volkgnsssdr) add_library(Volkgnsssdr::volkgnsssdr SHARED IMPORTED) set_target_properties(Volkgnsssdr::volkgnsssdr PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" IMPORTED_LOCATION "${VOLK_GNSSSDR_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${VOLK_GNSSSDR_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${VOLK_GNSSSDR_LINK_LIBRARIES}" ) endif() gnss-sdr-0.0.20/cmake/Modules/FindZEROMQ.cmake000066400000000000000000000032701477325711200206540ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2024-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause # # Provides the following imported target: # ZeroMQ::ZeroMQ # if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() find_package(PkgConfig) pkg_check_modules(PC_ZEROMQ "libzmq") find_path(ZEROMQ_INCLUDE_DIRS NAMES zmq.hpp HINTS ${PC_ZEROMQ_INCLUDE_DIR} PATHS ${GNSSSDR_INCLUDE_PATHS} ) find_library(ZEROMQ_LIBRARIES NAMES zmq libzmq.so.5 ${ZEROMQ_LIBRARY_NAME} HINTS ${PC_ZEROMQ_LIBDIR} PATHS ${GNSSSDR_LIB_PATHS} ) include(FindPackageHandleStandardArgs) # This is just to detect presence, include files not required find_package_handle_standard_args(ZEROMQ DEFAULT_MSG ZEROMQ_LIBRARIES) mark_as_advanced(ZEROMQ_LIBRARIES ZEROMQ_INCLUDE_DIRS) set_package_properties(ZEROMQ PROPERTIES URL "https://zeromq.org/") if(PC_ZEROMQ_VERSION) set_package_properties(ZEROMQ PROPERTIES DESCRIPTION "An open-source universal messaging library (found: v${PC_ZEROMQ_VERSION})" ) else() set_package_properties(ZEROMQ PROPERTIES DESCRIPTION "An open-source universal messaging library" ) endif() if(ZEROMQ_FOUND AND ZEROMQ_INCLUDE_DIRS AND NOT TARGET ZeroMQ::ZeroMQ) add_library(ZeroMQ::ZeroMQ INTERFACE IMPORTED) set_target_properties(ZeroMQ::ZeroMQ PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${ZEROMQ_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${ZEROMQ_LIBRARIES}" ) endif()gnss-sdr-0.0.20/cmake/Modules/GnsssdrBuildTypes.cmake000066400000000000000000000202011477325711200224570ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause if(DEFINED __INCLUDED_GNSSSDR_BUILD_TYPES_CMAKE) return() endif() set(__INCLUDED_GNSSSDR_BUILD_TYPES_CMAKE TRUE) # Standard CMake Build Types and their basic CFLAGS: # - None: nothing set # - Debug: -O2 -g # - Release: -O3 # - RelWithDebInfo: -O3 -g # - MinSizeRel: -Os # Additional Build Types, defined below: # - NoOptWithASM: -O0 -g -save-temps # - O2WithASM: -O2 -g -save-temps # - O3WithASM: -O3 -g -save-temps # Defines the list of acceptable cmake build types. When adding a new # build type below, make sure to add it to this list. list(APPEND AVAIL_BUILDTYPES None Debug Release RelWithDebInfo MinSizeRel Coverage NoOptWithASM O2WithASM O3WithASM ASAN ) ######################################################################## # GNSSSDR_CHECK_BUILD_TYPE(build type) # # Use this to check that the build type set in CMAKE_BUILD_TYPE on the # commandline is one of the valid build types used by this project. It # checks the value set in the cmake interface against the list of # known build types in AVAIL_BUILDTYPES. If the build type is found, # the function exits immediately. If nothing is found by the end of # checking all available build types, we exit with a soft warning, listing # the available build types, and setting the build type to None. ######################################################################## function(GNSSSDR_CHECK_BUILD_TYPE settype) string(TOUPPER ${settype} _settype) foreach(btype ${AVAIL_BUILDTYPES}) string(TOUPPER ${btype} _btype) if(${_settype} STREQUAL ${_btype}) return() # found it; exit cleanly endif() endforeach() # Build type not found; warn out at set it to None message(STATUS "Warning: Build type '${settype}' not valid, must be one of: ${AVAIL_BUILDTYPES}.") message(STATUS "Setting the build type to 'None'") set(CMAKE_BUILD_TYPE "None" PARENT_SCOPE) endfunction() ######################################################################## # For GCC and Clang, we can set a build type: # # -DCMAKE_BUILD_TYPE=Coverage # # This type uses no optimization (-O0), outputs debug symbols (-g) and # outputs all intermediary files the build system produces, including # all assembly (.s) files. Look in the build directory for these # files. # NOTE: This is not defined on Windows systems. ######################################################################## if(NOT WIN32) set(CMAKE_CXX_FLAGS_COVERAGE "-Wall -pedantic -pthread -g -O0 -fprofile-arcs -ftest-coverage" CACHE STRING "Flags used by the C++ compiler during Coverage builds." FORCE) set(CMAKE_C_FLAGS_COVERAGE "-Wall -pedantic -pthread -g -O0 -fprofile-arcs -ftest-coverage" CACHE STRING "Flags used by the C compiler during Coverage builds." FORCE) set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "-W" CACHE STRING "Flags used for linking binaries during Coverage builds." FORCE) set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "-W" CACHE STRING "Flags used by the shared lib linker during Coverage builds." FORCE) mark_as_advanced( CMAKE_CXX_FLAGS_COVERAGE CMAKE_C_FLAGS_COVERAGE CMAKE_EXE_LINKER_FLAGS_COVERAGE CMAKE_SHARED_LINKER_FLAGS_COVERAGE) endif() ######################################################################## # For GCC and Clang, we can set a build type: # # -DCMAKE_BUILD_TYPE=NoOptWithASM # # This type uses no optimization (-O0), outputs debug symbols (-g) and # outputs all intermediary files the build system produces, including # all assembly (.s) files. Look in the build directory for these # files. # NOTE: This is not defined on Windows systems. ######################################################################## if(NOT WIN32) set(CMAKE_CXX_FLAGS_NOOPTWITHASM "-Wall -save-temps -g -O0" CACHE STRING "Flags used by the C++ compiler during NoOptWithASM builds." FORCE) set(CMAKE_C_FLAGS_NOOPTWITHASM "-Wall -save-temps -g -O0" CACHE STRING "Flags used by the C compiler during NoOptWithASM builds." FORCE) set(CMAKE_EXE_LINKER_FLAGS_NOOPTWITHASM "-W" CACHE STRING "Flags used for linking binaries during NoOptWithASM builds." FORCE) set(CMAKE_SHARED_LINKER_FLAGS_NOOPTWITHASM "-W" CACHE STRING "Flags used by the shared lib linker during NoOptWithASM builds." FORCE) mark_as_advanced( CMAKE_CXX_FLAGS_NOOPTWITHASM CMAKE_C_FLAGS_NOOPTWITHASM CMAKE_EXE_LINKER_FLAGS_NOOPTWITHASM CMAKE_SHARED_LINKER_FLAGS_NOOPTWITHASM) endif() ######################################################################## # For GCC and Clang, we can set a build type: # # -DCMAKE_BUILD_TYPE=O2WithASM # # This type uses level 2 optimization (-O2), outputs debug symbols # (-g) and outputs all intermediary files the build system produces, # including all assembly (.s) files. Look in the build directory for # these files. # NOTE: This is not defined on Windows systems. ######################################################################## if(NOT WIN32) set(CMAKE_CXX_FLAGS_O2WITHASM "-Wall -save-temps -g -O2" CACHE STRING "Flags used by the C++ compiler during O2WithASM builds." FORCE) set(CMAKE_C_FLAGS_O2WITHASM "-Wall -save-temps -g -O2" CACHE STRING "Flags used by the C compiler during O2WithASM builds." FORCE) set(CMAKE_EXE_LINKER_FLAGS_O2WITHASM "-W" CACHE STRING "Flags used for linking binaries during O2WithASM builds." FORCE) set(CMAKE_SHARED_LINKER_FLAGS_O2WITHASM "-W" CACHE STRING "Flags used by the shared lib linker during O2WithASM builds." FORCE) mark_as_advanced( CMAKE_CXX_FLAGS_O2WITHASM CMAKE_C_FLAGS_O2WITHASM CMAKE_EXE_LINKER_FLAGS_O2WITHASM CMAKE_SHARED_LINKER_FLAGS_O2WITHASM) endif() ######################################################################## # For GCC and Clang, we can set a build type: # # -DCMAKE_BUILD_TYPE=O3WithASM # # This type uses level 3 optimization (-O3), outputs debug symbols # (-g) and outputs all intermediary files the build system produces, # including all assembly (.s) files. Look in the build directory for # these files. # NOTE: This is not defined on Windows systems. ######################################################################## if(NOT WIN32) set(CMAKE_CXX_FLAGS_O3WITHASM "-Wall -save-temps -g -O3" CACHE STRING "Flags used by the C++ compiler during O3WithASM builds." FORCE) set(CMAKE_C_FLAGS_O3WITHASM "-Wall -save-temps -g -O3" CACHE STRING "Flags used by the C compiler during O3WithASM builds." FORCE) set(CMAKE_EXE_LINKER_FLAGS_O3WITHASM "-W" CACHE STRING "Flags used for linking binaries during O3WithASM builds." FORCE) set(CMAKE_SHARED_LINKER_FLAGS_O3WITHASM "-W" CACHE STRING "Flags used by the shared lib linker during O3WithASM builds." FORCE) mark_as_advanced( CMAKE_CXX_FLAGS_O3WITHASM CMAKE_C_FLAGS_O3WITHASM CMAKE_EXE_LINKER_FLAGS_O3WITHASM CMAKE_SHARED_LINKER_FLAGS_O3WITHASM) endif() ######################################################################## # For GCC and Clang, we can set a build type: # # -DCMAKE_BUILD_TYPE=ASAN # # This type creates an address sanitized build (-fsanitize=address) # and defaults to the DebugParanoid linker flags. # NOTE: This is not defined on Windows systems. ######################################################################## if(NOT WIN32) set(CMAKE_CXX_FLAGS_ASAN "-Wall -Wextra -g -O2 -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer" CACHE STRING "Flags used by the C++ compiler during Address Sanitized builds." FORCE) set(CMAKE_C_FLAGS_ASAN "-Wall -Wextra -g -O2 -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer" CACHE STRING "Flags used by the C compiler during Address Sanitized builds." FORCE) set(CMAKE_EXE_LINKER_FLAGS_ASAN "-W" CACHE STRING "Flags used for linking binaries during Address Sanitized builds." FORCE) set(CMAKE_SHARED_LINKER_FLAGS_ASAN "-W" CACHE STRING "Flags used by the shared lib linker during Address Sanitized builds." FORCE) mark_as_advanced( CMAKE_CXX_FLAGS_ASAN CMAKE_C_FLAGS_ASAN CMAKE_EXE_LINKER_FLAGS_ASAN CMAKE_SHARED_LINKER_ASAN) endif() gnss-sdr-0.0.20/cmake/Modules/GnsssdrCrypto.cmake000066400000000000000000000155771477325711200216770ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2024-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause if(NOT COMMAND feature_summary) include(FeatureSummary) endif() if(NOT GNSSSDR_LIB_PATHS) include(GnsssdrFindPaths) endif() ################################################################################ # OpenSSL https://www.openssl.org/ ################################################################################ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(OPENSSL_ROOT_DIR /usr/local/opt/openssl) # Trick for Homebrew endif() unset(OPENSSL_FOUND CACHE) unset(GnuTLS_FOUND CACHE) unset(GMP_FOUND CACHE) if(NOT ENABLE_GNUTLS) find_package(OpenSSL) endif() set_package_properties(OpenSSL PROPERTIES URL "https://www.openssl.org" PURPOSE "Used for the OSNMA and SUPL protocol implementations." TYPE REQUIRED ) if(OPENSSL_FOUND) set_package_properties(OpenSSL PROPERTIES DESCRIPTION "Cryptography and SSL/TLS Toolkit (found: v${OPENSSL_VERSION})" ) else() set_package_properties(OpenSSL PROPERTIES DESCRIPTION "OpenSSL has not been found, but GnuTLS with openssl compatibility can replace it" ) ################################################################################ # GnuTLS - https://www.gnutls.org/ ################################################################################ find_package(GnuTLS) set_package_properties(GnuTLS PROPERTIES URL "https://www.gnutls.org/" PURPOSE "Used for the OSNMA and SUPL protocol implementations." TYPE REQUIRED ) if(GnuTLS_FOUND AND GNUTLS_VERSION_STRING) set_package_properties(GnuTLS PROPERTIES DESCRIPTION "Transport Layer Security Library (found: v${GNUTLS_VERSION_STRING})" ) else() set_package_properties(GnuTLS PROPERTIES DESCRIPTION "Transport Layer Security Library" ) endif() find_library(GNUTLS_OPENSSL_LIBRARY NAMES gnutls-openssl libgnutls-openssl.so.27 PATHS ${GNSSSDR_LIB_PATHS} ) find_path(GNUTLS_INCLUDE_DIR NAMES gnutls/gnutls.h PATHS ${GNSSSDR_INCLUDE_PATHS} ${GNUTLS_ROOT_DIR}/include/ ) if(NOT GNUTLS_OPENSSL_LIBRARY) message(" The GnuTLS library with openssl compatibility enabled has not been found.") message(" You can try to install the required libraries by typing:") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo yum install openssl-devel") else() message(" sudo apt install libgnutls28-dev") endif() endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") message(" 'sudo port install openssl3', if you are using Macports, or") message(" 'brew install openssl', if you are using Homebrew.") endif() message(FATAL_ERROR "OpenSSL or the GnuTLS libraries with openssl compatibility are required to build gnss-sdr") endif() # Test GnuTLS capabilities file(READ "${GNUTLS_INCLUDE_DIR}/gnutls/gnutls.h" gnutls_gnutls_file_contents) if("${gnutls_gnutls_file_contents}" MATCHES "GNUTLS_SIGN_ECDSA_SHA256") set(GNUTLS_SIGN_ECDSA_SHA256 TRUE) endif() if("${gnutls_gnutls_file_contents}" MATCHES "GNUTLS_SIGN_ECDSA_SHA512") set(GNUTLS_SIGN_ECDSA_SHA512 TRUE) endif() if("${gnutls_gnutls_file_contents}" MATCHES "GNUTLS_DIG_SHA3_256") set(GNUTLS_DIG_SHA3_256 TRUE) endif() if("${gnutls_gnutls_file_contents}" MATCHES "#define GNUTLS_VERSION_MAJOR 2") set(GNUTLS_HMAC_INIT_WITH_DIGEST TRUE) endif() if("${gnutls_gnutls_file_contents}" MATCHES "GNUTLS_MAC_AES_CMAC_128") set(GNUTLS_MAC_AES_CMAC_128 TRUE) endif() file(READ "${GNUTLS_INCLUDE_DIR}/gnutls/abstract.h" gnutls_abstract_file_contents) if("${gnutls_abstract_file_contents}" MATCHES "gnutls_pubkey_export2") set(GNUTLS_PUBKEY_EXPORT2 TRUE) endif() find_package(GMP) set_package_properties(GMP PROPERTIES PURPOSE "Required to decompress cryptographic keys." TYPE REQUIRED ) if(NOT GMP_FOUND) message(FATAL_ERROR "GMP is required by gnss-sdr if linking against GnuTLS") endif() endif() ################################################################################ function(link_to_crypto_dependencies target) if(OPENSSL_FOUND) if(TARGET OpenSSL::SSL) target_link_libraries(${target} PUBLIC OpenSSL::SSL ) if(TARGET OpenSSL::Crypto) target_link_libraries(${target} PUBLIC OpenSSL::Crypto ) endif() else() target_link_libraries(${target} PUBLIC ${OPENSSL_LIBRARIES} "${OPENSSL_CRYPTO_LIBRARIES}" ) target_include_directories(${target} PUBLIC ${OPENSSL_INCLUDE_DIR} ) endif() if(OPENSSL_VERSION) if(OPENSSL_VERSION VERSION_GREATER "3.0.0") target_compile_definitions(${target} PUBLIC -DUSE_OPENSSL_3=1) else() if(NOT OPENSSL_VERSION VERSION_LESS "1.1.1") target_compile_definitions(${target} PUBLIC -DUSE_OPENSSL_111=1) endif() endif() endif() else() # GnuTLS target_link_libraries(${target} PUBLIC ${GNUTLS_LIBRARIES} ${GNUTLS_OPENSSL_LIBRARY} PRIVATE Gmp::gmp ) target_include_directories(${target} PUBLIC ${GNUTLS_INCLUDE_DIR} ) target_compile_definitions(${target} PUBLIC -DUSE_GNUTLS_FALLBACK=1) if(GNUTLS_SIGN_ECDSA_SHA256) target_compile_definitions(${target} PRIVATE -DHAVE_GNUTLS_SIGN_ECDSA_SHA256=1) endif() if(GNUTLS_SIGN_ECDSA_SHA512) target_compile_definitions(${target} PRIVATE -DHAVE_GNUTLS_SIGN_ECDSA_SHA512=1) endif() if(GNUTLS_DIG_SHA3_256) target_compile_definitions(${target} PRIVATE -DHAVE_GNUTLS_DIG_SHA3_256=1) endif() if(GNUTLS_PUBKEY_EXPORT2) target_compile_definitions(${target} PRIVATE -DHAVE_GNUTLS_PUBKEY_EXPORT2=1) endif() if(GNUTLS_HMAC_INIT_WITH_DIGEST) target_compile_definitions(${target} PRIVATE -DHAVE_GNUTLS_HMAC_INIT_WITH_DIGEST=1) endif() if(GNUTLS_MAC_AES_CMAC_128) target_compile_definitions(${target} PRIVATE -DHAVE_GNUTLS_MAC_AES_CMAC_128=1) endif() endif() endfunction() gnss-sdr-0.0.20/cmake/Modules/GnsssdrFindPaths.cmake000066400000000000000000000046621477325711200222700ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2025 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause if(GNSSSDR_LIB_PATHS) return() endif() if(NOT CMAKE_INSTALL_LIBDIR) include(GNUInstallDirs) endif() set(GNSSSDR_LIB_PATHS /usr/lib /usr/lib64 /usr/lib/aarch64-linux-gnu /usr/lib/alpha-linux-gnu /usr/lib/arm-linux-gnueabi /usr/lib/arm-linux-gnueabihf /usr/lib/hppa-linux-gnu /usr/lib/hppa-linux-gnu /usr/lib/i386-gnu /usr/lib/i386-kfreebsd-gnu /usr/lib/i386-linux-gnu /usr/lib/loongarch64-linux-gnu /usr/lib/m68k-linux-gnu /usr/lib/mips-linux-gnu /usr/lib/mips64el-linux-gnuabi64 /usr/lib/mipsel-linux-gnu /usr/lib/powerpc-linux-gnu /usr/lib/powerpc-linux-gnuspe /usr/lib/powerpc64-linux-gnu /usr/lib/powerpc64le-linux-gnu /usr/lib/riscv64-linux-gnu /usr/lib/s390x-linux-gnu /usr/lib/sh4-linux-gnu /usr/lib/sparc64-linux-gnu /usr/lib/x86_64-kfreebsd-gnu /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnux32 /usr/local/lib /usr/local/lib64 /usr/local/lib/i386 ${CMAKE_INSTALL_FULL_LIBDIR} ${CMAKE_SYSTEM_PREFIX_PATH}/${CMAKE_INSTALL_LIBDIR} ${CMAKE_INSTALL_PREFIX}/lib ${CMAKE_INSTALL_PREFIX}/lib64 ) set(GNSSSDR_INCLUDE_PATHS /usr/include /usr/local/include ${CMAKE_INSTALL_FULL_INCLUDEDIR} ${CMAKE_SYSTEM_PREFIX_PATH}/include ${CMAKE_INSTALL_PREFIX}/include ) set(GNSSSDR_BIN_PATHS /usr/bin /usr/local/bin ${CMAKE_INSTALL_PREFIX}/bin ${CMAKE_INSTALL_FULL_BINDIR} ${CMAKE_SYSTEM_PREFIX_PATH}/bin /bin /sbin /usr/sbin ) if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") if(NOT MACOS_PACKAGES_PREFIX) include(DetectMacOSVersion) endif() set(GNSSSDR_LIB_PATHS ${GNSSSDR_LIB_PATHS} ${MACOS_PACKAGES_PREFIX}/${CMAKE_INSTALL_LIBDIR} ${MACOS_PACKAGES_PREFIX}/lib ${MACOS_PACKAGES_PREFIX}/lib64 ) set(GNSSSDR_INCLUDE_PATHS ${GNSSSDR_INCLUDE_PATHS} ${MACOS_PACKAGES_PREFIX}/include ~/Library/Frameworks /Library/Frameworks /sw/include # Fink /opt/csw/include # Blastwave ) set(GNSSSDR_BIN_PATHS ${GNSSSDR_BIN_PATHS} ${MACOS_PACKAGES_PREFIX}/bin ) endif() list(REMOVE_DUPLICATES GNSSSDR_LIB_PATHS) list(REMOVE_DUPLICATES GNSSSDR_INCLUDE_PATHS) gnss-sdr-0.0.20/cmake/Modules/SetupPython.cmake000066400000000000000000000237401477325711200213440ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ######################################################################## # Check for the existence of a python module: # - desc a string description of the check # - mod the name of the module to import # - cmd an additional command to run # - have the result variable to set ######################################################################## macro(GNSSSDR_PYTHON_CHECK_MODULE desc mod cmd have) message(STATUS "Python checking for ${desc}") execute_process( COMMAND ${PYTHON_EXECUTABLE} -c " ######################################### try: import ${mod} except: try: ${mod} except: exit(-1) try: assert ${cmd} except: exit(-1) #########################################" OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE ${have} ) if(${have} EQUAL 0) message(STATUS "Python checking for ${desc} - found") set(${have} TRUE) else() message(STATUS "Python checking for ${desc} - not found") set(${have} FALSE) endif() endmacro() ######################################################################## # Setup the python interpreter: # This allows the user to specify a specific interpreter, # or finds the interpreter via the built-in cmake module. ######################################################################## if(CMAKE_VERSION VERSION_LESS 3.12 OR CMAKE_CROSSCOMPILING) if(PYTHON_EXECUTABLE) message(STATUS "User set python executable ${PYTHON_EXECUTABLE}") string(FIND "${PYTHON_EXECUTABLE}" "python3" IS_PYTHON3) if(IS_PYTHON3 EQUAL -1) if(CMAKE_VERSION VERSION_LESS "3.24") find_package(PythonInterp ${GNSSSDR_PYTHON_MIN_VERSION} REQUIRED) else() set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) find_package(Python2 COMPONENTS Interpreter) set(PYTHONINTERP_FOUND Python2_Interpreter_FOUND) set(PYTHON_VERSION_MAJOR "${Python2_VERSION_MAJOR}") set(PYTHON_VERSION_STRING "${Python2_VERSION_MAJOR}.${Python2_VERSION_MINOR}") endif() else() if(CMAKE_VERSION VERSION_LESS "3.24") find_package(PythonInterp ${GNSSSDR_PYTHON3_MIN_VERSION} REQUIRED) else() set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) find_package(Python3 COMPONENTS Interpreter) set(PYTHONINTERP_FOUND Python3_Interpreter_FOUND) set(PYTHON_VERSION_MAJOR "${Python3_VERSION_MAJOR}") set(PYTHON_VERSION_STRING "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}") endif() endif() gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND) gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND) if(IS_PYTHON3 EQUAL -1) gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND) endif() else() message(STATUS "PYTHON_EXECUTABLE not set - trying by default python3") if(CMAKE_VERSION VERSION_LESS "3.24") set(Python_ADDITIONAL_VERSIONS 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11) find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION}) else() find_package(Python COMPONENTS Interpreter) set(PYTHONINTERP_FOUND Python_Interpreter_FOUND) set(PYTHON_EXECUTABLE "${Python_EXECUTABLE}") set(PYTHON_VERSION_MAJOR "${Python_VERSION_MAJOR}") set(PYTHON_VERSION_STRING "${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}") endif() if(NOT PYTHONINTERP_FOUND) message(STATUS "python3 not found - trying with python2.7") if(CMAKE_VERSION VERSION_LESS "3.24") set(Python_ADDITIONAL_VERSIONS 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11) find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION}) else() find_package(Python2 COMPONENTS Interpreter) set(PYTHONINTERP_FOUND Python2_Interpreter_FOUND) set(PYTHON_EXECUTABLE "${Python2_EXECUTABLE}") set(PYTHON_VERSION_MAJOR "${Python2_VERSION_MAJOR}") set(PYTHON_VERSION_STRING "${Python2_VERSION_MAJOR}.${Python2_VERSION_MINOR}") endif() endif() gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND) gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND) if(PYTHON_VERSION_STRING VERSION_LESS "3.0") gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND) endif() endif() else() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(_previous ${CMAKE_FIND_FRAMEWORK}) set(CMAKE_FIND_FRAMEWORK LAST) endif() if(PYTHON_EXECUTABLE) set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) endif() find_package(Python3 COMPONENTS Interpreter) if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(CMAKE_FIND_FRAMEWORK ${_previous}) endif() if(Python3_FOUND) set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) set(PYTHON_VERSION_MAJOR "${Python3_VERSION_MAJOR}") set(PYTHON_VERSION_STRING "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}") gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND) gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND) endif() if(NOT Python3_FOUND OR NOT MAKO_FOUND) find_package(Python2 COMPONENTS Interpreter) if(Python2_FOUND) set(PYTHON_EXECUTABLE ${Python2_EXECUTABLE}) set(PYTHON_VERSION_MAJOR ${Python2_VERSION_MAJOR}) set(PYTHON_VERSION_STRING "${Python2_VERSION_MAJOR}.${Python2_VERSION_MINOR}") gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND) gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND) gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND) endif() if(NOT MAKO_FOUND OR NOT SIX_FOUND) unset(PYTHON_EXECUTABLE) if(CMAKE_VERSION VERSION_LESS "3.24") find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION}) else() find_package(Python COMPONENTS Interpreter) set(PYTHONINTERP_FOUND Python_Interpreter_FOUND) set(PYTHON_EXECUTABLE "${Python_EXECUTABLE}") set(PYTHON_VERSION_STRING "${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}") set(PYTHON_VERSION_MAJOR "${Python_VERSION_MAJOR}") endif() gnsssdr_python_check_module("python >= ${GNSSSDR_PYTHON_MIN_VERSION}" sys "sys.version.split()[0] >= '${GNSSSDR_PYTHON_MIN_VERSION}'" PYTHON_MIN_VER_FOUND) gnsssdr_python_check_module("mako >= ${GNSSSDR_MAKO_MIN_VERSION}" mako "mako.__version__ >= '${GNSSSDR_MAKO_MIN_VERSION}'" MAKO_FOUND) if(NOT MAKO_FOUND) unset(PYTHON_EXECUTABLE) unset(PYTHON_VERSION_STRING) unset(PYTHON_VERSION_MAJOR) find_program(PYTHON_EXECUTABLE NAMES python3 python) if(PYTHON_EXECUTABLE) set(PYTHONINTERP_FOUND TRUE) execute_process(COMMAND ${PYTHON_EXECUTABLE} --version OUTPUT_VARIABLE PYTHON_VERSION_STRING_AUX) string(FIND "${PYTHON_VERSION_STRING_AUX}" " " blank_char_index) if(blank_char_index GREATER -1) math(EXPR start_index "${blank_char_index} + 1") string(SUBSTRING "${PYTHON_VERSION_STRING_AUX}" ${start_index} -1 PYTHON_VERSION_STRING) string(STRIP ${PYTHON_VERSION_STRING} PYTHON_VERSION_STRING) string(SUBSTRING "${PYTHON_VERSION_STRING_AUX}" ${start_index} 1 PYTHON_VERSION_MAJOR) message(STATUS "Found Python: ${PYTHON_EXECUTABLE} (found version: ${PYTHON_VERSION_STRING})") else() string(FIND ${PYTHON_EXECUTABLE} "python3" is_python3) if(is_python3 GREATER -1) set(PYTHON_VERSION_MAJOR "3") set(PYTHON_VERSION_STRING "3.10") # ? else() set(PYTHON_VERSION_MAJOR "2") set(PYTHON_VERSION_STRING "2.7") endif() endif() endif() gnsssdr_python_check_module("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND) endif() if(MAKO_FOUND AND PYTHON_VERSION_STRING VERSION_LESS "3.0") gnsssdr_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND) endif() endif() endif() endif() if("${PYTHON_VERSION_MAJOR}" VERSION_EQUAL 3) set(PYTHON3 TRUE) endif() if(CMAKE_CROSSCOMPILING) set(QA_PYTHON_EXECUTABLE "/usr/bin/python") else() set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE}) endif() # make the path to the executable appear in the cmake gui set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter") set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests") gnss-sdr-0.0.20/cmake/Modules/XcodeRemoveWarningDuplicates.cmake000066400000000000000000000020621477325711200246200ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2024 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause if(DEFINED __INCLUDED_XCODE_REMOVE_WARNING_DUPLICATES_CMAKE) return() endif() set(__INCLUDED_XCODE_REMOVE_WARNING_DUPLICATES_CMAKE TRUE) function(xcode_remove_warning_duplicates target) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "15.0.0") # A bug in Xcode 15 adds duplicate flags to the linker. In addition, the # `-warn_duplicate_libraries` is now enabled by default which may result # in several 'duplicate libraries warning'. # - https://gitlab.kitware.com/cmake/cmake/-/issues/25297 and # - https://indiestack.com/2023/10/xcode-15-duplicate-library-linker-warnings/ target_link_options(${target} PUBLIC "LINKER:-no_warn_duplicate_libraries") endif() endif() endfunction()gnss-sdr-0.0.20/cmake/Toolchains/000077500000000000000000000000001477325711200165255ustar00rootroot00000000000000gnss-sdr-0.0.20/cmake/Toolchains/aarch64-linux-gnu.cmake000066400000000000000000000024141477325711200227040ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) if(MINGW OR CYGWIN OR WIN32) set(UTIL_SEARCH_CMD where) elseif(UNIX OR APPLE) set(UTIL_SEARCH_CMD which) endif() set(TOOLCHAIN_PREFIX aarch64-linux-gnu-) execute_process( COMMAND ${UTIL_SEARCH_CMD} ${TOOLCHAIN_PREFIX}gcc OUTPUT_VARIABLE BINUTILS_PATH OUTPUT_STRIP_TRAILING_WHITESPACE ) get_filename_component(ARM_TOOLCHAIN_DIR ${BINUTILS_PATH} DIRECTORY) # The following is not needed on debian # Without that flag CMake is not able to pass test compilation check #set(CMAKE_EXE_LINKER_FLAGS_INIT "--specs=nosys.specs") set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++) set(CMAKE_OBJCOPY ${ARM_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}objcopy CACHE INTERNAL "objcopy tool") set(CMAKE_SIZE_UTIL ${ARM_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}size CACHE INTERNAL "size tool") set(CMAKE_FIND_ROOT_PATH ${BINUTILS_PATH}) set(CMAKE_CROSSCOMPILING_EMULATOR "qemu-aarch64 -L /usr/aarch64-linux-gnu/") gnss-sdr-0.0.20/cmake/Toolchains/arm-linux-gnueabihf.cmake000066400000000000000000000027131477325711200233740ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) if(MINGW OR CYGWIN OR WIN32) set(UTIL_SEARCH_CMD where) elseif(UNIX OR APPLE) set(UTIL_SEARCH_CMD which) endif() set(TOOLCHAIN_PREFIX arm-linux-gnueabihf-) execute_process( COMMAND ${UTIL_SEARCH_CMD} ${TOOLCHAIN_PREFIX}gcc OUTPUT_VARIABLE BINUTILS_PATH OUTPUT_STRIP_TRAILING_WHITESPACE ) get_filename_component(ARM_TOOLCHAIN_DIR ${BINUTILS_PATH} DIRECTORY) # The following is not needed on debian # Without that flag CMake is not able to pass test compilation check #set(CMAKE_EXE_LINKER_FLAGS_INIT "--specs=nosys.specs") set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++) ## the following is needed for CheckCSourceCompiles used in lib/CMakeLists.txt set(CMAKE_C_FLAGS "-mfpu=neon" CACHE STRING "" FORCE) set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" FORCE) set(CMAKE_OBJCOPY ${ARM_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}objcopy CACHE INTERNAL "objcopy tool") set(CMAKE_SIZE_UTIL ${ARM_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}size CACHE INTERNAL "size tool") set(CMAKE_FIND_ROOT_PATH ${BINUTILS_PATH}) set(CMAKE_CROSSCOMPILING_EMULATOR "qemu-arm -L /usr/arm-linux-gnueabihf/") gnss-sdr-0.0.20/cmake/Toolchains/arm_cortex_a15_hardfp_native.cmake000066400000000000000000000015301477325711200252310ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ######################################################################## # Toolchain file for building native on a ARM Cortex A8 w/ NEON # Usage: cmake -DCMAKE_TOOLCHAIN_FILE= ######################################################################## set(CMAKE_CXX_COMPILER g++) set(CMAKE_C_COMPILER gcc) set(CMAKE_CXX_FLAGS "-march=armv7-a -mtune=cortex-a15 -mfpu=neon -mfloat-abi=hard" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE) # same flags for C sources set(CMAKE_ASM_FLAGS "${CMAKE_CXX_FLAGS} -g" CACHE STRING "" FORCE) # same flags for asm sources gnss-sdr-0.0.20/cmake/Toolchains/arm_cortex_a53_hardfp_native.cmake000066400000000000000000000015521477325711200252370ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ######################################################################## # Toolchain file for building native on a ARM Cortex A53 w/ NEON # Usage: cmake -DCMAKE_TOOLCHAIN_FILE= ######################################################################## set(CMAKE_CXX_COMPILER g++) set(CMAKE_C_COMPILER gcc) set(CMAKE_CXX_FLAGS "-march=armv8-a -mtune=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE) # same flags for C sources set(CMAKE_ASM_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -g" CACHE STRING "" FORCE) # same flags for asm sources gnss-sdr-0.0.20/cmake/Toolchains/arm_cortex_a72_hardfp_native.cmake000066400000000000000000000015521477325711200252400ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ######################################################################## # Toolchain file for building native on a ARM Cortex A72 w/ NEON # Usage: cmake -DCMAKE_TOOLCHAIN_FILE= ######################################################################## set(CMAKE_CXX_COMPILER g++) set(CMAKE_C_COMPILER gcc) set(CMAKE_CXX_FLAGS "-march=armv8-a -mtune=cortex-a72 -mfpu=neon-fp-armv8 -mfloat-abi=hard" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE) # same flags for C sources set(CMAKE_ASM_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -g" CACHE STRING "" FORCE) # same flags for asm sources gnss-sdr-0.0.20/cmake/Toolchains/arm_cortex_a8_hardfp_native.cmake000066400000000000000000000015271477325711200251610ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ######################################################################## # Toolchain file for building native on a ARM Cortex A8 w/ NEON # Usage: cmake -DCMAKE_TOOLCHAIN_FILE= ######################################################################## set(CMAKE_CXX_COMPILER g++) set(CMAKE_C_COMPILER gcc) set(CMAKE_CXX_FLAGS "-march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE) # same flags for C sources set(CMAKE_ASM_FLAGS "${CMAKE_CXX_FLAGS} -g" CACHE STRING "" FORCE) # same flags for asm sources gnss-sdr-0.0.20/cmake/Toolchains/arm_cortex_a8_softfp_native.cmake000066400000000000000000000015311477325711200252110ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ######################################################################## # Toolchain file for building native on a ARM Cortex A8 w/ NEON # Usage: cmake -DCMAKE_TOOLCHAIN_FILE= ######################################################################## set(CMAKE_CXX_COMPILER g++) set(CMAKE_C_COMPILER gcc) set(CMAKE_CXX_FLAGS "-march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE) # same flags for C sources set(CMAKE_ASM_FLAGS "${CMAKE_CXX_FLAGS} -g" CACHE STRING "" FORCE) # same flags for asm sources gnss-sdr-0.0.20/cmake/Toolchains/arm_cortex_a9_hardfp_native.cmake000066400000000000000000000015271477325711200251620ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ######################################################################## # Toolchain file for building native on a ARM Cortex A8 w/ NEON # Usage: cmake -DCMAKE_TOOLCHAIN_FILE= ######################################################################## set(CMAKE_CXX_COMPILER g++) set(CMAKE_C_COMPILER gcc) set(CMAKE_CXX_FLAGS "-march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE) # same flags for C sources set(CMAKE_ASM_FLAGS "${CMAKE_CXX_FLAGS} -g" CACHE STRING "" FORCE) # same flags for asm sources gnss-sdr-0.0.20/cmake/Toolchains/oe-sdk_cross.cmake000066400000000000000000000023171477325711200221250ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ########################################################## # Toolchain file for Open Embedded ########################################################## set(CMAKE_SYSTEM_NAME Linux) string(REGEX MATCH "sysroots/([a-zA-Z0-9]+)" CMAKE_SYSTEM_PROCESSOR $ENV{SDKTARGETSYSROOT}) string(REGEX REPLACE "sysroots/" "" CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}) set(CMAKE_CXX_FLAGS $ENV{CXXFLAGS} CACHE STRING "" FORCE) set(CMAKE_C_FLAGS $ENV{CFLAGS} CACHE STRING "" FORCE) # same flags for C sources set(CMAKE_LDFLAGS_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE) # same flags for C sources set(CMAKE_LIBRARY_PATH $ENV{OECORE_TARGET_SYSROOT}/usr/lib) set(CMAKE_FIND_ROOT_PATH $ENV{OECORE_TARGET_SYSROOT} $ENV{OECORE_NATIVE_SYSROOT}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(ORC_INCLUDE_DIRS $ENV{OECORE_TARGET_SYSROOT}/usr/include/orc-0.4) set(ORC_LIBRARY_DIRS $ENV{OECORE_TARGET_SYSROOT}/usr/lib) gnss-sdr-0.0.20/cmake/Toolchains/raspi3.cmake000066400000000000000000000015521477325711200207330ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ######################################################################## # Toolchain file for building native on a ARM Cortex A72 w/ NEON # Usage: cmake -DCMAKE_TOOLCHAIN_FILE= ######################################################################## set(CMAKE_CXX_COMPILER g++) set(CMAKE_C_COMPILER gcc) set(CMAKE_CXX_FLAGS "-march=armv8-a -mtune=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE) # same flags for C sources set(CMAKE_ASM_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -g" CACHE STRING "" FORCE) # same flags for asm sources gnss-sdr-0.0.20/cmake/Toolchains/raspi4.cmake000066400000000000000000000015521477325711200207340ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ######################################################################## # Toolchain file for building native on a ARM Cortex A72 w/ NEON # Usage: cmake -DCMAKE_TOOLCHAIN_FILE= ######################################################################## set(CMAKE_CXX_COMPILER g++) set(CMAKE_C_COMPILER gcc) set(CMAKE_CXX_FLAGS "-march=armv8-a -mtune=cortex-a72 -mfpu=neon-fp-armv8 -mfloat-abi=hard" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE) # same flags for C sources set(CMAKE_ASM_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -g" CACHE STRING "" FORCE) # same flags for asm sources gnss-sdr-0.0.20/cmake/Toolchains/rv64gcv-linux-gnu.cmake000066400000000000000000000021221477325711200227510ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # Copyright (C) 2011-2025 (see AUTHORS file for a list of contributors) # SPDX-License-Identifier: BSD-3-Clause set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR riscv64) set(CMAKE_C_COMPILER $ENV{CC}) set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) set(CMAKE_CXX_COMPILER $ENV{CXX}) set(CMAKE_C_FLAGS "$ENV{CFLAGS} -march=rv64gcv" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "" FORCE) set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -g" CACHE STRING "" FORCE) set(CMAKE_OBJCOPY ${RISCV64_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}objcopy CACHE INTERNAL "objcopy tool") set(CMAKE_SIZE_UTIL ${RISCV64_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}size CACHE INTERNAL "size tool") set(CMAKE_FIND_ROOT_PATH ${BINUTILS_PATH}) set(QEMU_VLEN $ENV{VLEN}) if(NOT QEMU_VLEN) set(QEMU_VLEN "128") endif() set(CMAKE_CROSSCOMPILING_EMULATOR "qemu-riscv64-static -L /usr/riscv64-linux-gnu/ -cpu rv64,zba=true,zbb=true,v=on,vlen=${QEMU_VLEN},rvv_ta_all_1s=on,rvv_ma_all_1s=on") gnss-sdr-0.0.20/cmake/Toolchains/zynq-7000.cmake000066400000000000000000000023641477325711200211210ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause ########################################################## # Toolchain file for Zynq-7000 devices ########################################################## set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_VERSION 1) set(CMAKE_SYSROOT /home/carlesfernandez/binary) ### POINT THIS TO YOUR ROOTFS set(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabihf-g++) set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(ZYNQ_FLAGS "-march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a7" ) set(CMAKE_ASM_FLAGS ${ZYNQ_FLAGS} CACHE STRING "" FORCE) set(CMAKE_C_FLAGS ${ZYNQ_FLAGS} CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS ${ZYNQ_FLAGS} CACHE STRING "" FORCE) set(CMAKE_LIBRARY_PATH ${CMAKE_SYSROOT}/usr/lib ${CMAKE_SYSROOT}/usr/lib/arm-linux-gnueabihf ) set(CMAKE_INSTALL_PREFIX ${CMAKE_SYSROOT}/usr CACHE STRING "" FORCE) gnss-sdr-0.0.20/cmake/cmake_uninstall.cmake.in000066400000000000000000000025711477325711200212070ustar00rootroot00000000000000# GNSS-SDR is a Global Navigation Satellite System software-defined receiver. # This file is part of GNSS-SDR. # # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es # SPDX-License-Identifier: BSD-3-Clause if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") endif() file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) string(REGEX REPLACE "\n" ";" files "${files}") foreach(file ${files}) message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") if(CMAKE_VERSION VERSION_LESS 3.17) execute_process( COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}" OUTPUT_VARIABLE rm_out RESULT_VARIABLE rm_retval ) else() execute_process( COMMAND @CMAKE_COMMAND@ -E rm "$ENV{DESTDIR}${file}" OUTPUT_VARIABLE rm_out RESULT_VARIABLE rm_retval ) endif() if(NOT "${rm_retval}" STREQUAL 0) message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") endif() else() message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") endif() endforeach() gnss-sdr-0.0.20/conf/000077500000000000000000000000001477325711200142675ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/File_input/000077500000000000000000000000001477325711200163655ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/File_input/Beidou/000077500000000000000000000000001477325711200175745ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/File_input/Beidou/gnss-sdr_BDS_B1I_byte.conf000066400000000000000000000100251477325711200243470ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=25000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/archive/BDS3_datasets/BdsB1IStr01.dat SignalSource.item_type=byte SignalSource.sampling_frequency=25000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner DataTypeAdapter.implementation=Byte_To_Short InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.input_item_type=short InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.70 InputFilter.band2_begin=0.80 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=25000000 InputFilter.IF=6250000 InputFilter.dump = false InputFilter.dump_filename=/home/dmiralles/Documents/gnss-sdr/tests/signal_samples/BdsB1IStr01_fs25e6_if0_4ms.dat Resampler.implementation=Pass_Through Resampler.sample_freq_in=25000000 Resampler.sample_freq_out=25000000 Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_B1.count=10 Channels.in_acquisition=1 Channel.signal=B1 Channel0.satellite = 6; Channel1.satellite = 8; Channel2.satellite = 9; Channel3.satellite = 13; Channel4.satellite = 17; Channel5.satellite = 1; Channel6.satellite = 2; Channel7.satellite = 3; Channel8.satellite = 4; Channel9.satellite = 5; ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_B1.implementation=BEIDOU_B1I_PCPS_Acquisition Acquisition_B1.item_type=gr_complex Acquisition_B1.coherent_integration_time_ms=1 Acquisition_B1.pfa=0.01 ;Acquisition_B1.pfa=0.0000001; Acquisition_B1.doppler_max=10000 Acquisition_B1.doppler_step=100 Acquisition_B1.dump=true Acquisition_B1.dump_filename=./bds_acq Acquisition_B1.blocking=false; Acquisition_B1.bit_transition_flag = false; ;######### TRACKING GLOBAL CONFIG ############ Tracking_B1.implementation=BEIDOU_B1I_DLL_PLL_Tracking Tracking_B1.item_type=gr_complex Tracking_B1.pll_bw_hz=25.0; Tracking_B1.dll_bw_hz=2.50; Tracking_B1.dump=false; Tracking_B1.dump_filename=./epl_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_B1.implementation=BEIDOU_B1I_Telemetry_Decoder TelemetryDecoder_B1.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=true PVT.rinex_version=3 PVT.rinex_output_enabled=true PVT.gpx_output_enabled=true gnss-sdr-0.0.20/conf/File_input/Beidou/gnss-sdr_BDS_B3I_GPS_L1_CA_ibyte.conf000066400000000000000000000160101477325711200261320ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=30000000 GNSS-SDR.num_sources=2 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;# Signal Source config for GPS, Galileo signals SignalSource0.implementation=File_Signal_Source SignalSource0.filename=/archive/BDS3_datasets/long/20180713_211400_3.dat SignalSource0.item_type=ibyte SignalSource0.sampling_frequency=10000000 SignalSource0.samples=0 SignalSource0.repeat=false SignalSource0.dump=false SignalSource0.enable_throttle_control=false ;# Signal Source config for BDS signals SignalSource1.implementation=File_Signal_Source SignalSource1.filename=/archive/BDS3_datasets/long/20180713_211400_2.dat SignalSource1.item_type=ibyte SignalSource1.sampling_frequency=30000000 SignalSource1.samples=0 SignalSource1.repeat=false SignalSource1.dump=false SignalSource1.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;# Signal Conditioner config for GPS, Galileo signals SignalConditioner0.implementation=Signal_Conditioner DataTypeAdapter0.implementation=Ibyte_To_Complex InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.70 InputFilter0.band2_begin=0.80 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=10000000 InputFilter0.IF=420000 Resampler0.implementation=Direct_Resampler Resampler0.sample_freq_in=10000000 Resampler0.sample_freq_out=30000000 Resampler0.item_type=gr_complex ;# Signal Conditioner config for BDS signals SignalConditioner1.implementation=Signal_Conditioner DataTypeAdapter1.implementation=Ibyte_To_Complex InputFilter1.implementation=Freq_Xlating_Fir_Filter InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex InputFilter1.taps_item_type=float InputFilter1.number_of_taps=5 InputFilter1.number_of_bands=2 InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.70 InputFilter1.band2_begin=0.80 InputFilter1.band2_end=1.0 InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 InputFilter1.filter_type=bandpass InputFilter1.grid_density=16 InputFilter1.sampling_frequency=10000000 InputFilter1.IF=1020000 Resampler1.implementation=Pass_Through Resampler1.sample_freq_in=30000000 Resampler1.sample_freq_out=30000000 Resampler1.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=7 Channels_B3.count=4 Channels.in_acquisition=11 ;# Preparing collection for GPS satellites Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel0.signal=1C Channel0.satellite = 2 Channel1.signal=1C Channel1.satellite = 5 Channel2.signal=1C Channel2.satellite = 25 Channel3.signal=1C Channel3.satellite = 31 Channel4.signal=1C Channel4.satellite = 24 Channel5.signal=1C Channel5.satellite = 6 Channel6.signal=1C Channel6.satellite = 29 ;# Preparing collection for BDS satellites Channel7.RF_channel_ID=1 Channel8.RF_channel_ID=1 Channel9.RF_channel_ID=1 Channel10.RF_channel_ID=1 Channel7.signal=B3 Channel7.satellite = 29 Channel8.signal=B3 Channel8.satellite = 19 Channel9.signal=B3 Channel9.satellite = 20 Channel10.signal=B3 Channel10.satellite = 30 ;######### ACQUISITION GLOBAL CONFIG ############ ;# Acquisition config for BDS signals Acquisition_B3.implementation=BEIDOU_B3I_PCPS_Acquisition Acquisition_B3.item_type=gr_complex Acquisition_B3.coherent_integration_time_ms=1 Acquisition_B3.pfa=0.01 Acquisition_B3.doppler_max=15000 Acquisition_B3.doppler_step=50 Acquisition_B3.dump=false Acquisition_B3.dump_filename=/home/dmiralles/Documents/Research/Publications/INSIDE_GNSS/bds_leg_pvt/Data/bds_b1i_acq Acquisition_B3.blocking=false; Acquisition_B3.use_CFAR_algorithm=true; Acquisition_B3.bit_transition_flag = false; ;# Acquisition config for GPS signals Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=15000 Acquisition_1C.doppler_step=50 Acquisition_1C.dump=true Acquisition_1C.dump_filename=/home/dmiralles/Documents/Research/Publications/INSIDE_GNSS/bds_leg_pvt/Data/gps_l1ca_acq Acquisition_1C.blocking=false; Acquisition_1C.use_CFAR_algorithm=true; Acquisition_1C.bit_transition_flag = false; ;######### TRACKING GLOBAL CONFIG ############ Tracking_B3.implementation=BEIDOU_B3I_DLL_PLL_Tracking Tracking_B3.item_type=gr_complex Tracking_B3.pll_bw_hz=25.0; Tracking_B3.dll_bw_hz=2.50; Tracking_B3.dump=true; Tracking_B3.dump_filename=/home/dmiralles/Documents/Research/Publications/INSIDE_GNSS/bds_leg_pvt/Data/bds_b1i_trk_ch_ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=25.0; Tracking_1C.dll_bw_hz=2.50; Tracking_1C.dump=true; Tracking_1C.dump_filename=/home/dmiralles/Documents/Research/Publications/INSIDE_GNSS/bds_leg_pvt/Data/gps_l1ca_trk_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_B3.implementation=BEIDOU_B3I_Telemetry_Decoder TelemetryDecoder_B3.dump=false TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=true Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=OFF ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump=true PVT.dump_filename = /home/dmiralles/Documents/Research/Publications/INSIDE_GNSS/bds_leg_pvt/Data/pvt_l1 PVT.kml_output_enabled = false; PVT.xml_output_enabled = false; PVT.gpx_output_enabled = false; PVT.rinex_output_enabled = false; PVT.rtcm_output_enabled = false; PVT.nmea_output_enabled = false; PVT.geojson_output_enabled = false; gnss-sdr-0.0.20/conf/File_input/Beidou/gnss-sdr_BDS_B3I_byte.conf000066400000000000000000000077351477325711200243670ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=50000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/archive/BDS3_datasets/BdsB3IStr01.dat SignalSource.item_type=byte SignalSource.sampling_frequency=50000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.enable_throttle_control=false ;SignalSource.samples=200000 ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner DataTypeAdapter.implementation=Byte_To_Short InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.input_item_type=short InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.70 InputFilter.band2_begin=0.80 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=50000000 InputFilter.IF=12500000 InputFilter.dump = false InputFilter.dump_filename=/home/dmiralles/Documents/gnss-sdr/tests/signal_samples/BdsB3IStr01_fs50e6_if0_4ms.dat Resampler.implementation=Pass_Through Resampler.sample_freq_in=50000000 Resampler.sample_freq_out=50000000 Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_B3.count=10 Channels.in_acquisition=1 Channel.signal=B3 Channel0.satellite = 6; Channel1.satellite = 23; Channel2.satellite = 16; Channel3.satellite = 18; Channel4.satellite = 7; Channel5.satellite = 1; Channel6.satellite = 2; Channel7.satellite = 3; Channel8.satellite = 4; Channel9.satellite = 5; ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_B3.implementation=BEIDOU_B3I_PCPS_Acquisition Acquisition_B3.item_type=gr_complex Acquisition_B3.coherent_integration_time_ms=3 Acquisition_B3.max_dwells = 2 Acquisition_B3.pfa=0.01 Acquisition_B3.doppler_max=10000 Acquisition_B3.doppler_step=100 Acquisition_B3.dump=false Acquisition_B3.dump_filename=./bds_acq ;######### TRACKING GLOBAL CONFIG ############ Tracking_B3.implementation=BEIDOU_B3I_DLL_PLL_Tracking Tracking_B3.item_type=gr_complex Tracking_B3.pll_bw_hz=40.0; Tracking_B3.dll_bw_hz=4.0; Tracking_B3.pll_bw_narrow_hz=20.0; Tracking_B3.dll_bw_narrow_hz=3.0; Tracking_B3.dump=false; Tracking_B3.dump_filename=./epl_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_B3.implementation=BEIDOU_B3I_Telemetry_Decoder TelemetryDecoder_B3.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=true gnss-sdr-0.0.20/conf/File_input/Beidou/gnss-sdr_BDS_B3I_ibyte.conf000066400000000000000000000100511477325711200245210ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=30000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/archive/BDS3_datasets/long/20180713_211400_2.dat SignalSource.item_type=ibyte SignalSource.sampling_frequency=30000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner DataTypeAdapter.implementation=Ibyte_To_Complex InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.70 InputFilter.band2_begin=0.80 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=30000000 InputFilter.IF=1020000 Resampler.implementation=Pass_Through Resampler.sample_freq_in=30000000 Resampler.sample_freq_out=30000000 Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_B3.count=4 Channels.in_acquisition=1 Channel.signal=B3 Channel0.satellite = 29; Channel1.satellite = 19; Channel2.satellite = 20; Channel3.satellite = 30; ;Channel0.satellite = 6; ;Channel1.satellite = 7; ;Channel2.satellite = 9; ;Channel3.satellite = 16; ;Channel4.satellite = 18; ;Channel5.satellite = 1; ;Channel6.satellite = 2; ;Channel7.satellite = 3; ;Channel8.satellite = 4; ;Channel9.satellite = 5; ;Channel10.satellite = 23; ;Channel11.satellite = 25; ;Channel12.satellite = 32; ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_B3.implementation=BEIDOU_B3I_PCPS_Acquisition Acquisition_B3.item_type=gr_complex Acquisition_B3.coherent_integration_time_ms=1 Acquisition_B3.max_dwells = 1 Acquisition_B3.pfa=0.01 ;Acquisition_B3.pfa=0.0000001; Acquisition_B3.doppler_max=10000 Acquisition_B3.doppler_step=50 Acquisition_B3.dump=false Acquisition_B3.dump_filename=./bds_acq Acquisition_B3.blocking=false; Acquisition_B3.bit_transition_flag = false; ;######### TRACKING GLOBAL CONFIG ############ Tracking_B3.implementation=BEIDOU_B3I_DLL_PLL_Tracking Tracking_B3.item_type=gr_complex Tracking_B3.pll_bw_hz=25.0; Tracking_B3.dll_bw_hz=2.50; Tracking_B3.dump=false; Tracking_B3.dump_filename=./epl_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_B3.implementation=BEIDOU_B3I_Telemetry_Decoder TelemetryDecoder_B3.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=OFF ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=true gnss-sdr-0.0.20/conf/File_input/Beidou/gnss-sdr_BDS_B3I_short.conf000066400000000000000000000055621477325711200245570ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; 5C is the channel identifier for BeiDou B2a, both the data signal and the pilot signal [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=30000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source ;SignalSource.filename=/home/dmiralles/Documents/gnss-sdr/tests/signal_samples/USRP_BDS_B2a_201805171115_fs_25e6_if0e3_ishort_200ms.bin SignalSource.filename=/archive/USRP_BDS_B3I_201805171118_fs_25e6_if0e3_ishort.bin SignalSource.item_type=ishort SignalSource.sampling_frequency=30000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner InputFilter.implementation=Pass_Through DataTypeAdapter.implementation=Ishort_To_Complex Resampler.implementation=Direct_Resampler Resampler.sample_freq_in=30000000 Resampler.sample_freq_out=30000000 Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channel.signal=B3 Channels.in_acquisition=1 Channels_B3.count=5; Channel0.satellite = 27; Channel1.satellite = 22; Channel2.satellite = 21; Channel3.satellite = 28; Channel4.satellite = 30; ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_B3.implementation=BEIDOU_B3I_PCPS_Acquisition Acquisition_B3.item_type=gr_complex Acquisition_B3.coherent_integration_time_ms = 1 Acquisition_B3.max_dwells = 1 Acquisition_B3.pfa=0.01 Acquisition_B3.doppler_max=10000 Acquisition_B3.doppler_step=50 Acquisition_B3.dump=true Acquisition_B3.dump_channel = 0; Acquisition_B3.dump_filename=/archive/bds_b3i_acq Acquisition_B3.blocking=false; Acquisition_B3.bit_transition_flag = false; ;######### TRACKING GLOBAL CONFIG ############ Tracking_B3.implementation= BEIDOU_B3I_DLL_PLL_Tracking; Tracking_B3.item_type=gr_complex Tracking_B3.early_late_space_chips=0.5 Tracking_B3.pll_bw_hz=25.0; Tracking_B3.dll_bw_hz=2.0; Tracking_B3.dump=true; Tracking_B3.dump_filename=/archive/bds_b3i_trk_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_B3.implementation=BEIDOU_B3I_Telemetry_Decoder TelemetryDecoder_B3.dump=true TelemetryDecoder_B3.dump_filename=/archive/bds_b3i_tel_dec.dat ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=true; Observables.dump_filename=/archive/bds_b3i_observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.averaging_depth=100 PVT.flag_averaging=true PVT.output_rate_ms=10 PVT.display_rate_ms=500 gnss-sdr-0.0.20/conf/File_input/GPS/000077500000000000000000000000001477325711200170165ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr-L1-gaussian.conf000066400000000000000000000044661477325711200235210ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2000000 GNSS-SDR.internal_fs_hz=2000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/home/glamountain/gnss-sdr/data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat SignalSource.item_type=ishort SignalSource.sampling_frequency=4000000 SignalSource.freq=1575420000 SignalSource.samples=0 ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner DataTypeAdapter.implementation=Ishort_To_Complex InputFilter.implementation=Pass_Through InputFilter.item_type=gr_complex Resampler.implementation=Direct_Resampler Resampler.sample_freq_in=4000000 Resampler.sample_freq_out=2000000 Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./kalman/acq_dump ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_Gaussian_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=4.0; Tracking_1C.order=3; Tracking_1C.dump=true Tracking_1C.dump_filename=./kalman/epl_tracking_ch_ Tracking_1C.bce_run = true; Tracking_1C.p_transient = 0; Tracking_1C.s_transient = 100; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=100 PVT.flag_averaging=true PVT.output_rate_ms=10 PVT.display_rate_ms=500 gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr_GPS_L1_CA_ibyte.conf000066400000000000000000000057701477325711200242420ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=6625000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/archive/NT1065_L1_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE SignalSource.item_type=ibyte ;SignalSource.samples=66250000 SignalSource.samples=0 SignalSource.dump=false; ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner DataTypeAdapter.implementation=Ibyte_To_Complex InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.70 InputFilter.band2_begin=0.80 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=6625000 InputFilter.IF=60000 Resampler.implementation=Direct_Resampler Resampler.sample_freq_in=6625000 Resampler.sample_freq_out=6625000 Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channel.signal=1C Channels.in_acquisition=1 Channels_1C.count=6 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.threshold=0.01 ;Acquisition_1C.pfa=0.00001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false; Acquisition_1C.dump_filename=/archive/gps_acquisition.dat ;Acquisition_1C.coherent_integration_time_ms=10 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.early_late_space_chips=0.5 Tracking_1C.pll_bw_hz=25.0; Tracking_1C.dll_bw_hz=3.0; Tracking_1C.dump=false; Tracking_1C.dump_filename=/archive/gps_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=true; Observables.dump_filename=/archive/gps_observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.trop_model=Saastamoinen PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1045_rate_ms=5000 PVT.rtcm_MT1097_rate_ms=1000 PVT.rtcm_MT1077_rate_ms=1000 PVT.rinex_version=3 gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr_GPS_L1_SPIR.conf000066400000000000000000000101611477325711200233260ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Spir_File_Signal_Source SignalSource.filename=/dtalogger/signals/spir/data/20Secs/20Secs_L1.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=int SignalSource.sampling_frequency=80000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat InputFilter.input_item_type=float InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=80000000 InputFilter.IF=10164 InputFilter.decimation_factor=20 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.item_type=gr_complex Resampler.sample_freq_in=80000000 Resampler.sample_freq_out=4000000 Resampler.dump=false Resampler.dump_filename=./resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=10 Channels_1B.count=0 Channels.in_acquisition=1 Channel.signal=1C ;######### CHANNEL 0 CONFIG ############ ;Channel0.satellite=20 ;######### CHANNEL 1 CONFIG ############ ;Channel1.satellite=12 ;######### CHANNEL 2 CONFIG ############ ;Channel2.satellite=11 ;######### CHANNEL 3 CONFIG ############ ;Channel3.satellite=19 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=0.005 ;Acquisition_1C.pfa=0.0001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_min=-10000 Acquisition_1C.doppler_step=500 Acquisition_1C.max_dwells=5 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=20.0; Tracking_1C.order=3; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=500 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=true; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr_GPS_L1_acq_QuickSync.conf000066400000000000000000000067461477325711200253240ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=ishort SignalSource.sampling_frequency=4000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Ishort_To_Complex DataTypeAdapter.dump=false DataTypeAdapter.dump_filename=./data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Pass_Through InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.item_type=gr_complex Resampler.sample_freq_in=4000000 Resampler.sample_freq_out=4000000 Resampler.dump=false Resampler.dump_filename=./resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=5 Channels.in_acquisition=1 ;######### ACQUISITION GLOBAL CONFIG ############_1C Acquisition_1C.implementation=GPS_L1_CA_PCPS_QuickSync_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent-integration_time_ms=4 Acquisition_1C.dump=true ;Acquisition_1C.dump_filename=./acq_dump.dat ;######### ACQUISITION CHANNELS CONFIG ###### Acquisition_1C.implementation=GPS_L1_CA_PCPS_QuickSync_Acquisition Acquisition_1C.threshold=0.4 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=50.0; Tracking_1C.dll_bw_hz=4.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5 Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100; PVT.display_rate_ms=500; PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea PVT.flag_nmea_tty_port=true PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr_GPS_L1_gr_complex.conf000066400000000000000000000061721477325711200247170ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=ishort SignalSource.sampling_frequency=4000000 SignalSource.freq=1575420000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner DataTypeAdapter.implementation=Ishort_To_Complex DataTypeAdapter.dump=false DataTypeAdapter.dump_filename=./DataTypeAdapter.dat InputFilter.implementation=Pass_Through InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex Resampler.implementation=Pass_Through Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=5 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.dump=true Tracking_1C.dump_filename=epl_tracking_ch_ Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=4.0; Tracking_1C.order=3; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_c ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=1 PVT.display_rate_ms=100 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr_GPS_L1_ishort.conf000066400000000000000000000064501477325711200240670ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/archive/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=ishort SignalSource.sampling_frequency=4000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Ishort_To_Complex ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Pass_Through InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex ;######### RESAMPLER CONFIG ############ Resampler.implementation=Direct_Resampler Resampler.sample_freq_in=4000000 Resampler.sample_freq_out=2000000 Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 ;Acquisition_1C.pfa=0.000001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.blocking=false; ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=4.0; Tracking_1C.order=3; Tracking_1C.dump=false; Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=true Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf000066400000000000000000000134771477325711200321270ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2500000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE SignalSource.item_type=gr_complex SignalSource.firmware_file=flexiband_III-1b.bit SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 SignalSource.AGC=true SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.dump=false InputFilter0.dump_filename=./input_filter.dat InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=20000000 InputFilter0.IF=0; InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through InputFilter1.dump=false InputFilter1.dump_filename=./input_filter.dat InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through InputFilter2.dump=false InputFilter2.dump_filename=./input_filter.dat InputFilter2.input_item_type=gr_complex InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 ;#signal: Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.extend_correlation_ms=10 Tracking_1C.pll_bw_hz=40.0; Tracking_1C.pll_bw_narrow_hz=35; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.dll_bw_narrow_hz=2.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=true Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1a.conf000066400000000000000000000134361477325711200321550ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2500000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Flexiband_Signal_Source SignalSource.item_type=gr_complex SignalSource.firmware_file=flexiband_III-1a.bit SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 SignalSource.AGC=true SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.dump=false InputFilter0.dump_filename=./input_filter.dat InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=20000000 InputFilter0.IF=-205000 InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through InputFilter1.dump=false InputFilter1.dump_filename=./input_filter.dat InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through InputFilter2.dump=false InputFilter2.dump_filename=./input_filter.dat InputFilter2.input_item_type=gr_complex InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=3.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1b.conf000066400000000000000000000134141477325711200321520ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2500000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Flexiband_Signal_Source SignalSource.item_type=gr_complex SignalSource.firmware_file=flexiband_III-1b.bit SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.dump=false InputFilter0.dump_filename=./input_filter.dat InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.IF=-205000 InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through InputFilter1.dump=false InputFilter1.dump_filename=./input_filter.dat InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through InputFilter2.dump=false InputFilter2.dump_filename=./input_filter.dat InputFilter2.input_item_type=gr_complex InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=3.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf000066400000000000000000000135641477325711200320510ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2500000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Flexiband_Signal_Source SignalSource.item_type=gr_complex SignalSource.firmware_file=flexiband_II-3b.bit SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 SignalSource.AGC=true SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.dump=false InputFilter0.dump_filename=./input_filter.dat InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=40000000 InputFilter0.IF=-205000 InputFilter0.decimation_factor=16 ;######### RESAMPLER CONFIG 0 ############ Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through InputFilter1.dump=false InputFilter1.dump_filename=./input_filter.dat InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through InputFilter2.dump=false InputFilter2.dump_filename=./input_filter.dat InputFilter2.input_item_type=gr_complex InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1G" GLONASS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "5X" GALILEO E5a I+Q ;# "L5" GPS L5 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 ;#signal: Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=3.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_I_1b.conf000066400000000000000000000132201477325711200317230ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=5000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Flexiband_Signal_Source SignalSource.item_type=gr_complex SignalSource.firmware_file=flexiband_I-1b.bit SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 SignalSource.AGC=true SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.dump=false InputFilter0.dump_filename=./input_filter.dat InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=40000000 InputFilter0.IF=-205000 InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through InputFilter1.dump=false InputFilter1.dump_filename=./input_filter.dat InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through InputFilter2.dump=false InputFilter2.dump_filename=./input_filter.dat InputFilter2.input_item_type=gr_complex InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=4 Channels.in_acquisition=1 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 ;Channel4.RF_channel_ID=0 ;Channel5.RF_channel_ID=0 ;Channel6.RF_channel_ID=0 ;Channel7.RF_channel_ID=0 ;#signal: Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=3.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_realtime_III_1b.conf000066400000000000000000000204101477325711200325010ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2500000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Flexiband_Signal_Source SignalSource.item_type=gr_complex SignalSource.firmware_file=flexiband_III-1b.bit SignalSource.RF_channels=2 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 SignalSource.AGC=true SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.dump=false InputFilter0.dump_filename=./input_filter.dat InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=20000000 InputFilter0.IF=-205000 InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter1.implementation=Freq_Xlating_Fir_Filter InputFilter1.dump=false InputFilter1.dump_filename=./input_filter_ch1.dat InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex InputFilter1.taps_item_type=float InputFilter1.number_of_taps=5 InputFilter1.number_of_bands=2 InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 InputFilter1.filter_type=bandpass InputFilter1.grid_density=16 InputFilter1.sampling_frequency=20000000 InputFilter1.IF=100000 InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through InputFilter2.dump=false InputFilter2.dump_filename=./input_filter.dat InputFilter2.input_item_type=gr_complex InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels_2S.count=8 Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1G" GLONASS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "5X" GALILEO E5a I+Q ;# "L5" GPS L5 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel0.signal=1C Channel1.RF_channel_ID=0 Channel1.signal=1C Channel2.RF_channel_ID=0 Channel2.signal=1C Channel3.RF_channel_ID=0 Channel3.signal=1C Channel4.RF_channel_ID=0 Channel4.signal=1C Channel5.RF_channel_ID=0 Channel5.signal=1C Channel6.RF_channel_ID=0 Channel6.signal=1C Channel7.RF_channel_ID=0 Channel7.signal=1C Channel8.RF_channel_ID=1 Channel8.signal=2S Channel9.RF_channel_ID=1 Channel9.signal=2S Channel10.RF_channel_ID=1 Channel10.signal=2S Channel11.RF_channel_ID=1 Channel11.signal=2S Channel12.RF_channel_ID=1 Channel12.signal=2S Channel13.RF_channel_ID=1 Channel13.signal=2S Channel14.RF_channel_ID=1 Channel14.signal=2S Channel15.RF_channel_ID=1 Channel15.signal=2S Channel8.RF_channel_ID=1 Channel8.signal=2S Channel9.RF_channel_ID=1 Channel9.signal=2S Channel10.RF_channel_ID=1 Channel10.signal=2S Channel11.RF_channel_ID=1 Channel11.signal=2S Channel12.RF_channel_ID=1 Channel12.signal=2S Channel13.RF_channel_ID=1 Channel13.signal=2S Channel14.RF_channel_ID=1 Channel14.signal=2S Channel15.RF_channel_ID=1 Channel15.signal=2S ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=250 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=3.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=true Tracking_1C.dump_filename=./tracking_ch_ ;# GPS L2C M Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.item_type=gr_complex Acquisition_2S.pfa=0.01 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_min=-5000 Acquisition_2S.doppler_step=30 Acquisition_2S.max_dwells=1 Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.pll_bw_hz=1.5; Tracking_2S.dll_bw_hz=0.3; Tracking_2S.order=3; Tracking_2S.early_late_space_chips=0.5; Tracking_2S.dump=true Tracking_2S.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER GPS L1 CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GPS L2 CONFIG ############ TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder TelemetryDecoder_2S.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.flag_averaging=true PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_bin_file_III_1b.conf000066400000000000000000000210321477325711200344530ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/File_input/GPS; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2500000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE SignalSource.item_type=gr_complex SignalSource.firmware_file=flexiband_III-1b.bit SignalSource.RF_channels=2 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 SignalSource.AGC=true SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.dump=false InputFilter0.dump_filename=./input_filter.dat InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=20000000 InputFilter0.IF=0 InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter1.implementation=Freq_Xlating_Fir_Filter InputFilter1.dump=false InputFilter1.dump_filename=./input_filter_ch1.dat InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex InputFilter1.taps_item_type=float InputFilter1.number_of_taps=5 InputFilter1.number_of_bands=2 InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 InputFilter1.filter_type=bandpass InputFilter1.grid_density=16 InputFilter1.sampling_frequency=20000000 InputFilter1.IF=0 InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through InputFilter2.dump=false InputFilter2.dump_filename=./input_filter.dat InputFilter2.input_item_type=gr_complex InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############. Channels_1C.count=2 Channels_1B.count=4 Channels_2S.count=4 Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1G" GLONASS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "5X" GALILEO E5a I+Q ;# "L5" GPS L5 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=1 Channel3.RF_channel_ID=1 Channel4.RF_channel_ID=1 Channel5.RF_channel_ID=1 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 Channel8.RF_channel_ID=0 Channel9.RF_channel_ID=0 Channel10.RF_channel_ID=1 Channel11.RF_channel_ID=1 Channel12.RF_channel_ID=1 Channel13.RF_channel_ID=1 Channel14.RF_channel_ID=1 Channel15.RF_channel_ID=1 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=250 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=1.5; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; ;# GPS L2C M Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.item_type=gr_complex Acquisition_2S.pfa=0.01 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_min=-5000 Acquisition_2S.doppler_step=30 Acquisition_2S.max_dwells=1 Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.pll_bw_hz=1.5; Tracking_2S.dll_bw_hz=0.3; Tracking_2S.order=3; Tracking_2S.early_late_space_chips=0.5; Tracking_2S.dump=true Tracking_2S.dump_filename=./epl_tracking_ch_ ;# GALILEO E1B Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 ;Acquisition_1B.threshold=0 Acquisition_1B.pfa=0.0000005 Acquisition_1B.doppler_max=5000 Acquisition_1B.doppler_step=125 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=15.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER GPS L1 CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GPS L2 CONFIG ############ TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder TelemetryDecoder_2S.dump=false ;######### TELEMETRY DECODER GALILEO E1B CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=100 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/GPS/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf000066400000000000000000000271111477325711200323730ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=5000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true SignalSource.signal_file=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE SignalSource.item_type=gr_complex SignalSource.firmware_file=flexiband_III-1b.bit SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 SignalSource.AGC=true SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.dump=false InputFilter0.dump_filename=./input_filter_ch0.dat InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=20000000 InputFilter0.IF=0 InputFilter0.decimation_factor=4 ;######### RESAMPLER CONFIG 0 ############ Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter1.implementation=Freq_Xlating_Fir_Filter InputFilter1.dump=false InputFilter1.dump_filename=./input_filter_ch1.dat InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex InputFilter1.taps_item_type=float InputFilter1.number_of_taps=5 InputFilter1.number_of_bands=2 InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 InputFilter1.filter_type=bandpass InputFilter1.grid_density=16 InputFilter1.sampling_frequency=20000000 InputFilter1.IF=0 InputFilter1.decimation_factor=4 ;######### RESAMPLER CONFIG 1 ############ Resampler1.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 2 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 2 CONFIG ############ SignalConditioner2.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Freq_Xlating_Fir_Filter InputFilter2.dump=false InputFilter2.dump_filename=./input_filter_ch2.dat InputFilter2.input_item_type=gr_complex InputFilter2.output_item_type=gr_complex InputFilter2.taps_item_type=float InputFilter2.number_of_taps=5 InputFilter2.number_of_bands=2 InputFilter2.band1_begin=0.0 InputFilter2.band1_end=0.45 InputFilter2.band2_begin=0.55 InputFilter2.band2_end=1.0 InputFilter2.ampl1_begin=1.0 InputFilter2.ampl1_end=1.0 InputFilter2.ampl2_begin=0.0 InputFilter2.ampl2_end=0.0 InputFilter2.band1_error=1.0 InputFilter2.band2_error=1.0 InputFilter2.filter_type=bandpass InputFilter2.grid_density=16 InputFilter2.sampling_frequency=40000000 InputFilter2.IF=0 InputFilter2.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=0 Channels_1B.count=10 Channels_2S.count=0 Channels_5X.count=0 Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1G" GLONASS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "5X" GALILEO E5a I+Q ;# "L5" GPS L5 ;# CHANNEL NUMBERING ORDER: GPS L1 C/A, GPS L2 L2C (M), GALILEO E1 B, GALILEO E5a ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 Channel8.RF_channel_ID=0 Channel9.RF_channel_ID=0 Channel10.RF_channel_ID=0 Channel11.RF_channel_ID=0 Channel12.RF_channel_ID=0 Channel13.RF_channel_ID=0 Channel14.RF_channel_ID=0 Channel15.RF_channel_ID=0 Channel16.RF_channel_ID=0 Channel17.RF_channel_ID=0 Channel18.RF_channel_ID=0 Channel19.RF_channel_ID=0 Channel20.RF_channel_ID=0 Channel21.RF_channel_ID=0 Channel22.RF_channel_ID=0 Channel23.RF_channel_ID=0 Channel24.RF_channel_ID=0 Channel25.RF_channel_ID=0 Channel26.RF_channel_ID=0 Channel27.RF_channel_ID=0 Channel28.RF_channel_ID=0 Channel29.RF_channel_ID=0 Channel30.RF_channel_ID=2 Channel31.RF_channel_ID=2 Channel32.RF_channel_ID=2 Channel33.RF_channel_ID=2 Channel34.RF_channel_ID=2 Channel35.RF_channel_ID=2 Channel36.RF_channel_ID=2 Channel37.RF_channel_ID=2 Channel38.RF_channel_ID=2 Channel39.RF_channel_ID=2 ;######### ACQUISITION CONFIG ###### ;# GPS L1 CA Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=250 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;# Galileo E1 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 ;Acquisition_1B.threshold=0 Acquisition_1B.pfa=0.0000002 Acquisition_1B.doppler_max=5000 Acquisition_1B.doppler_step=125 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;# GPS L2C M Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.item_type=gr_complex Acquisition_2S.pfa=0.01 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_min=-5000 Acquisition_2S.doppler_step=60 Acquisition_2S.max_dwells=1 Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat ;# GALILEO E5a Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF Acquisition_5X.item_type=gr_complex Acquisition_5X.coherent_integration_time_ms=1 Acquisition_5X.threshold=0.009 Acquisition_5X.doppler_max=5000 Acquisition_5X.doppler_step=125 Acquisition_5X.bit_transition_flag=false Acquisition_5X.max_dwells=1 Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is deactivated. Recommended value 3000 Hz Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF. Acquisition_5X.dump=false Acquisition_5X.dump_filename=./acq_dump.dat ;######### TRACKING CONFIG ############ ;######### GPS L1 C/A GENERIC TRACKING CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=3.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### GALILEO E1 TRK CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=15.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### GPS L2C GENERIC TRACKING CONFIG ############ Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.pll_bw_hz=2.0; Tracking_2S.dll_bw_hz=0.25; Tracking_2S.order=2; Tracking_2S.early_late_space_chips=0.5; Tracking_2S.dump=false Tracking_2S.dump_filename=./tracking_ch_ ;######### GALILEO E5 TRK CONFIG ############ Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking Tracking_5X.item_type=gr_complex Tracking_5X.pll_bw_hz_init=20.0; **Only for E5a** PLL loop filter bandwidth during initialization [Hz] Tracking_5X.dll_bw_hz_init=20.0; **Only for E5a** DLL loop filter bandwidth during initialization [Hz] Tracking_5X.ti_ms=1; **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms] Tracking_5X.pll_bw_hz=20.0; Tracking_5X.dll_bw_hz=20.0; Tracking_5X.order=2; Tracking_5X.early_late_space_chips=0.5; Tracking_5X.dump=false Tracking_5X.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder TelemetryDecoder_2S.dump=false TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder TelemetryDecoder_5X.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=100 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b_real.conf000066400000000000000000000175421477325711200333260ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/File_input/GPS; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=5000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true SignalSource.signal_file=/home/javier/signals/20140923_20-24-17_L125_roof_210s.usb ; <- PUT YOUR FILE HERE SignalSource.item_type=gr_complex SignalSource.firmware_file=flexiband_III-1b.bit SignalSource.RF_channels=2 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 SignalSource.AGC=true SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.dump=false InputFilter0.dump_filename=./input_filter_ch0.dat InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.IF=0 InputFilter0.decimation_factor=4 ;######### RESAMPLER CONFIG 0 ############ Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter1.implementation=Freq_Xlating_Fir_Filter InputFilter1.dump=false InputFilter1.dump_filename=./input_filter_ch1.dat InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex InputFilter1.taps_item_type=float InputFilter1.number_of_taps=5 InputFilter1.number_of_bands=2 InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 InputFilter1.filter_type=bandpass InputFilter1.grid_density=16 InputFilter1.sampling_frequency=20000000 InputFilter1.IF=0 InputFilter1.decimation_factor=4 ;######### RESAMPLER CONFIG 1 ############ Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through InputFilter2.dump=false InputFilter2.dump_filename=./input_filter.dat InputFilter2.input_item_type=gr_complex InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=10 Channels_2S.count=4 ;#GPS.prns=7,8 Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1G" GLONASS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "5X" GALILEO E5a I+Q ;# "L5" GPS L5 ;# CHANNEL NUMBERING ORDER: GPS L1 C/A, GPS L2 L2C (M), GALILEO E1 B, GALILEO E5a ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 Channel8.RF_channel_ID=0 Channel9.RF_channel_ID=0 Channel10.RF_channel_ID=1 Channel11.RF_channel_ID=1 Channel12.RF_channel_ID=1 Channel13.RF_channel_ID=1 Channel14.RF_channel_ID=1 Channel15.RF_channel_ID=1 Channel16.RF_channel_ID=1 Channel17.RF_channel_ID=1 Channel18.RF_channel_ID=1 Channel19.RF_channel_ID=1 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=250 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;# GPS L2C M Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.item_type=gr_complex Acquisition_2S.pfa=0.01 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_min=-5000 Acquisition_2S.doppler_step=60 Acquisition_2S.max_dwells=1 Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat ;######### TRACKING CONFIG ############ ;######### GPS L1 C/A GENERIC TRACKING CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=3.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### GPS L2C GENERIC TRACKING CONFIG ############ Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.pll_bw_hz=2.0; Tracking_2S.dll_bw_hz=0.25; Tracking_2S.order=2; Tracking_2S.early_late_space_chips=0.5; Tracking_2S.dump=false Tracking_2S.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder TelemetryDecoder_2S.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=true Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=100 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/Galileo/000077500000000000000000000000001477325711200177415ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/File_input/Galileo/gnss-sdr_Galileo_E1_acq_QuickSync.conf000066400000000000000000000065251477325711200271560ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=ishort SignalSource.sampling_frequency=4000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Ishort_To_Complex DataTypeAdapter.dump=false DataTypeAdapter.dump_filename=./data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Pass_Through ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=./resampler.dat Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_1B.count=4 Channels.in_acquisition=1 Channel.signal=1B ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 Acquisition_1B.threshold=0.05 Acquisition_1B.doppler_max=15000 Acquisition_1B.doppler_step=125 Acquisition_1B.coherent_integration_time_ms=8 Acquisition_1B.cboc=false Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=20.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100; PVT.display_rate_ms=500; PVT.dump=false PVT.dump_filename=./PVT PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=true; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false; PVT.flag_rtcm_tty_port=false; PVT.rtcm_dump_devname=/dev/pts/1 gnss-sdr-0.0.20/conf/File_input/Galileo/gnss-sdr_Galileo_E1_ishort.conf000066400000000000000000000070261477325711200257260ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=ishort SignalSource.sampling_frequency=4000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.enable_throttle_control=true ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Ishort_To_Complex ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Pass_Through InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.item_type=gr_complex Resampler.sample_freq_in=4000000 Resampler.sample_freq_out=4000000 Resampler.dump=false Resampler.dump_filename=./resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_1B.count=8 Channels.in_acquisition=1 Channel.signal=1B ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 ;Acquisition_1B.threshold=0 Acquisition_1B.pfa=0.00001 Acquisition_1B.doppler_max=15000 Acquisition_1B.doppler_step=125 Acquisition_1B.cboc=false Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat Acquisition_1B.blocking=false ;######### TRACKING GLOBAL CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.dump=true Tracking_1B.dump_filename=./veml_tracking_ch_ Tracking_1B.pll_bw_hz=20.0; Tracking_1B.dll_bw_hz=3.0; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.track_pilot=true Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100; PVT.display_rate_ms=500; PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=true PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=true; PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1045_rate_ms=5000 PVT.rtcm_MSM_rate_ms=1000 PVT.flag_rtcm_tty_port=false; PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/Galileo/gnss-sdr_Galileo_E1_nsr.conf000066400000000000000000000101441477325711200252130ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. ;GNSS-SDR.internal_fs_sps=6826700 GNSS-SDR.internal_fs_sps=2560000 ;GNSS-SDR.internal_fs_sps=4096000 ;GNSS-SDR.internal_fs_sps=5120000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Nsr_File_Signal_Source SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE SignalSource.item_type=byte SignalSource.sampling_frequency=20480000 SignalSource.samples=0 ; 0 means the entire file SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.input_item_type=float InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=20480000 InputFilter.IF=5499998.47412109 InputFilter.decimation_factor=8 InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1B.count=8 Channels.in_acquisition=1 Channel.signal=1B ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 Acquisition_1B.pfa=0.0000008 Acquisition_1B.doppler_max=15000 Acquisition_1B.doppler_step=125 Acquisition_1B.cboc=false ; This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false]. Use only if GNSS-SDR.internal_fs_sps is greater than or equal to 6138000 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=20.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=true Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump=true PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea PVT.flag_nmea_tty_port=true PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 gnss-sdr-0.0.20/conf/File_input/Galileo/gnss-sdr_Galileo_E5a.conf000066400000000000000000000075321477325711200245050ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=32000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en ;GNSS-SDR.SUPL_gps_enabled=false ;GNSS-SDR.SUPL_read_gps_assistance_xml=false ;GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com ;GNSS-SDR.SUPL_gps_ephemeris_port=7275 ;GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com ;GNSS-SDR.SUPL_gps_acquisition_port=7275 ;GNSS-SDR.SUPL_MCC=244 ;GNSS-SDR.SUPL_MNC=5 ;GNSS-SDR.SUPL_LAC=0x59e2 ;GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/signals/ifen/32MS_complex.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=gr_complex SignalSource.sampling_frequency=32000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_5X.count=1 Channels.in_acquisition=1 ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ ;Channel0.satellite=19 ;######### CHANNEL 1 CONFIG ############ ;Channel1.satellite=12 ;######### CHANNEL 2 CONFIG ############ ;Channel2.satellite=11 ;######### CHANNEL 3 CONFIG ############ ;Channel3.system=Galileo ;Channel3.signal=5Q ;Channel3.satellite=20 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF Acquisition_5X.item_type=gr_complex Acquisition_5X.coherent_integration_time_ms=1 Acquisition_5X.pfa=0.01 Acquisition_5X.pfa=0.0003 Acquisition_5X.doppler_max=10000 Acquisition_5X.doppler_step=250 Acquisition_5X.bit_transition_flag=false Acquisition_5X.max_dwells=1 Acquisition_5X.CAF_window_hz=0 Acquisition_5X.Zero_padding=0 Acquisition_5X.dump=false Acquisition_5X.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking Tracking_5X.item_type=gr_complex Tracking_5X.pll_bw_hz=20.0; Tracking_5X.dll_bw_hz=20.0; Tracking_5X.pll_bw_narrow_hz=2.0; Tracking_5X.dll_bw_narrow_hz=5.0; Tracking_5X.order=2; Tracking_5X.early_late_space_chips=0.5; Tracking_5X.dump=false Tracking_5X.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder TelemetryDecoder_5X.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=true; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/Galileo/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf000066400000000000000000000125311477325711200261160ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=50000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en ;GNSS-SDR.SUPL_gps_enabled=false ;GNSS-SDR.SUPL_read_gps_assistance_xml=false ;GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com ;GNSS-SDR.SUPL_gps_ephemeris_port=7275 ;GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com ;GNSS-SDR.SUPL_gps_acquisition_port=7275 ;GNSS-SDR.SUPL_MCC=244 ;GNSS-SDR.SUPL_MNC=5 ;GNSS-SDR.SUPL_LAC=0x59e2 ;GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/signals/ifen/Galileo_E5ab_IFEN_CTTC_run1.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=gr_complex SignalSource.sampling_frequency=50000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=50000000 InputFilter.IF=-15345000 InputFilter.decimation_factor=1 InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=./resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_5X.count=8 Channels.in_acquisition=1 Channel.signal=5X ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.signal=5X ;Channel0.satellite=19 ;Channel0.repeat_satellite=true ;######### CHANNEL 1 CONFIG ############ Channel1.signal=5X ;Channel1.satellite=12 ;######### CHANNEL 2 CONFIG ############ Channel2.signal=5X ;Channel2.satellite=11 ;######### CHANNEL 3 CONFIG ############ Channel3.signal=5X ;Channel3.satellite=20 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF Acquisition_5X.item_type=gr_complex Acquisition_5X.coherent_integration_time_ms=1 Acquisition_5X.threshold=0.002 Acquisition_5X.doppler_max=10000 Acquisition_5X.doppler_step=250 Acquisition_5X.bit_transition_flag=false Acquisition_5X.max_dwells=1 Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is deactivated. Recommended value 3000 Hz Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF. Acquisition_5X.dump=false Acquisition_5X.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking Tracking_5X.item_type=gr_complex Tracking_5X.pll_bw_hz=20.0; Tracking_5X.dll_bw_hz=20.0; Tracking_5X.pll_bw_narrow_hz=20.0; Tracking_5X.dll_bw_narrow_hz=20.0; Tracking_5X.order=2; Tracking_5X.early_late_space_chips=0.5; Tracking_5X.dump=false Tracking_5X.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder TelemetryDecoder_5X.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=OFF ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=OFF ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.dump=false PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea PVT.flag_nmea_tty_port=true PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 gnss-sdr-0.0.20/conf/File_input/Galileo/gnss-sdr_galileo_E1_extended_correlator_byte.conf000066400000000000000000000104361477325711200315340ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=20000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s_L1.bin ; <- PUT YOUR FILE HERE SignalSource.item_type=byte SignalSource.sampling_frequency=20000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Ibyte_To_Complex ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Pass_Through ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=0 Channels_1B.count=8 Channels.in_acquisition=1 Channel1.signal=1B Channel2.signal=1B Channel3.signal=1B Channel4.signal=1B Channel5.signal=1B Channel6.signal=1B Channel7.signal=1B Channel8.signal=1B Channel9.signal=1B Channel10.signal=1B Channel11.signal=1B Channel12.signal=1B Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.scoherent_integration_time_ms=1 Acquisition_1C.threshold=2.5 Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=500 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### GALILEO ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 Acquisition_1B.acquire_pilot=true Acquisition_1B.threshold=2.5 Acquisition_1B.doppler_max=5000 Acquisition_1B.doppler_step=125 Acquisition_1B.bit_transition_flag=true Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=30.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.track_pilot=true Tracking_1B.pll_bw_hz=4.0; Tracking_1B.dll_bw_hz=0.5; Tracking_1B.pll_bw_narrow_hz=2.0; Tracking_1B.dll_bw_narrow_hz=0.25; Tracking_1B.extend_correlation_symbols=4; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.early_late_space_narrow_chips=0.06; Tracking_1B.very_early_late_space_narrow_chips=0.25; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GALILEO CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100; PVT.display_rate_ms=500; PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/Galileo/gnss-sdr_galileo_E1_extended_correlator_labsat.conf000066400000000000000000000123501477325711200320340ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=5456000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Labsat_Signal_Source SignalSource.selected_channel=1 ;#filename: path to file with the captured GNSS signal samples to be processed ;# Labsat sile source automatically increments the file name when the signal is split in several files ;# the adapter adds "_0000.LS3" to this base path and filename. Next file will be "_0001.LS3" and so on ;# in this example, the first file complete path will be ../signals/GPS_025_0000.LS3 SignalSource.filename=../signals/GPS_025 ; <- PUT YOUR FILE HERE SignalSource.item_type=gr_complex SignalSource.sampling_frequency=16368000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=gr_complex ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=16368000 InputFilter.IF=0 InputFilter.decimation_factor=3 ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=0 Channels_1B.count=6 Channels.in_acquisition=1 Channel0.signal=1B Channel1.signal=1B Channel2.signal=1B Channel3.signal=1B Channel4.signal=1B Channel5.signal=1B Channel6.signal=1B Channel7.signal=1B Channel8.signal=1B Channel9.signal=1B Channel10.signal=1B Channel11.signal=1B Channel12.signal=1B Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=2.5 Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### GALILEO ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 Acquisition_1B.acquire_pilot=true Acquisition_1B.threshold=2.5 Acquisition_1B.doppler_max=5000 Acquisition_1B.doppler_step=125 Acquisition_1B.bit_transition_flag=true Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.track_pilot=true Tracking_1B.pll_bw_hz=7.5; Tracking_1B.dll_bw_hz=0.5; Tracking_1B.pll_bw_narrow_hz=2.5; Tracking_1B.dll_bw_narrow_hz=0.25; Tracking_1B.extend_correlation_symbols=4; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.early_late_space_narrow_chips=0.15; Tracking_1B.very_early_late_space_narrow_chips=0.30; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GALILEO CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100; PVT.display_rate_ms=500; PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/Glonass/000077500000000000000000000000001477325711200177735ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/File_input/Glonass/gnss-sdr_GLONASS_L1_CA_GPS_L1_CA_ibyte.conf000066400000000000000000000111201477325711200272660ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=6625000 GNSS-SDR.num_sources=2 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource0.implementation=File_Signal_Source SignalSource0.filename=./NT1065_L1_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE SignalSource0.item_type=ibyte SignalSource0.sampling_frequency=6625000 SignalSource0.samples=0 SignalSource0.dump=false; SignalSource0.dump_filename=/archive/signal_glonass.bin SignalSource1.implementation=File_Signal_Source SignalSource1.filename=./NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE SignalSource1.item_type=ibyte SignalSource1.sampling_frequency=6625000 SignalSource1.samples=0 SignalSource1.dump=false; SignalSource1.dump_filename=/archive/signal_glonass.bin ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner DataTypeAdapter0.implementation=Ibyte_To_Complex InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.70 InputFilter0.band2_begin=0.80 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=6625000 InputFilter0.IF=60000 Resampler0.implementation=Direct_Resampler Resampler0.sample_freq_in=6625000 Resampler0.sample_freq_out=6625000 Resampler0.item_type=gr_complex SignalConditioner1.implementation=Signal_Conditioner DataTypeAdapter1.implementation=Ibyte_To_Complex InputFilter1.implementation=Pass_Through InputFilter1.item_type=gr_complex Resampler1.implementation=Pass_Through Resampler1.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels.in_acquisition=1 Channels_1G.count=5 Channels_1C.count=5 ;# Defining GLONASS satellites Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=1 Channel6.RF_channel_ID=1 Channel7.RF_channel_ID=1 Channel8.RF_channel_ID=1 Channel9.RF_channel_ID=1 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.threshold=0.0 Acquisition_1C.pfa=0.00001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false; Acquisition_1C.dump_filename=/archive/gps_acquisition.dat ;Acquisition_1C.coherent_integration_time_ms=10 Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition Acquisition_1G.item_type=gr_complex Acquisition_1G.threshold=0.0 Acquisition_1G.pfa=0.00001 Acquisition_1G.doppler_max=10000 Acquisition_1G.doppler_step=250 Acquisition_1G.dump=false; Acquisition_1G.dump_filename=/archive/glo_acquisition.dat ;Acquisition_1G.coherent_integration_time_ms=10 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.early_late_space_chips=0.5 Tracking_1C.pll_bw_hz=20.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.dump=false; Tracking_1C.dump_filename=/archive/gps_tracking_ch_ Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_Tracking Tracking_1G.item_type=gr_complex Tracking_1G.early_late_space_chips=0.5 Tracking_1G.pll_bw_hz=25.0; Tracking_1G.dll_bw_hz=3.0; Tracking_1G.dump=false; Tracking_1G.dump_filename=/archive/glo_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false; Observables.dump_filename=/archive/gnss_observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.trop_model=Saastamoinen PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1045_rate_ms=5000 PVT.rtcm_MT1097_rate_ms=1000 PVT.rtcm_MT1077_rate_ms=1000 PVT.rinex_version=2 gnss-sdr-0.0.20/conf/File_input/Glonass/gnss-sdr_GLONASS_L1_CA_GPS_L2C_ibyte.conf000066400000000000000000000107531477325711200270420ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=6625000 GNSS-SDR.num_sources=2 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource0.implementation=File_Signal_Source SignalSource0.filename=/archive/NT1065_L2_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE SignalSource0.item_type=ibyte SignalSource0.sampling_frequency=6625000 SignalSource0.samples=0 SignalSource0.dump=false; SignalSource0.dump_filename=/archive/signal_glonass.bin SignalSource1.implementation=File_Signal_Source SignalSource1.filename=/archive/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE SignalSource1.item_type=ibyte SignalSource1.sampling_frequency=6625000 SignalSource1.samples=0 SignalSource1.dump=false; SignalSource1.dump_filename=/archive/signal_glonass.bin ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner DataTypeAdapter0.implementation=Ibyte_To_Complex InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.70 InputFilter0.band2_begin=0.80 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=6625000 InputFilter0.IF=60000 Resampler0.implementation=Pass_Through Resampler0.item_type=gr_complex SignalConditioner1.implementation=Signal_Conditioner DataTypeAdapter1.implementation=Ibyte_To_Complex InputFilter1.implementation=Pass_Through InputFilter1.item_type=gr_complex Resampler1.implementation=Pass_Through Resampler1.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels.in_acquisition=5 Channels_2S.count=5 Channels_1G.count=5 ;# Defining GLONASS satellites Channel0.RF_channel_ID=0 Channel0.signal=2S Channel1.RF_channel_ID=0 Channel1.signal=2S Channel2.RF_channel_ID=0 Channel2.signal=2S Channel3.RF_channel_ID=0 Channel3.signal=2S Channel4.RF_channel_ID=0 Channel4.signal=2S Channel5.RF_channel_ID=1 Channel6.RF_channel_ID=1 Channel7.RF_channel_ID=1 Channel8.RF_channel_ID=1 Channel9.RF_channel_ID=1 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.item_type=gr_complex Acquisition_2S.threshold=0.0 Acquisition_2S.pfa=0.00001 Acquisition_2S.doppler_max=10000 Acquisition_2S.doppler_step=60 Acquisition_2S.max_dwells=1 Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition Acquisition_1G.item_type=gr_complex Acquisition_1G.threshold=0.0 Acquisition_1G.pfa=0.00001 Acquisition_1G.doppler_max=10000 Acquisition_1G.doppler_step=250 Acquisition_1G.dump=false; Acquisition_1G.dump_filename=/archive/glo_acquisition.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.early_late_space_chips=0.5 Tracking_2S.pll_bw_hz=2.0; Tracking_2S.dll_bw_hz=0.250; Tracking_2S.order=2; Tracking_2S.dump=false; Tracking_2S.dump_filename=/archive/gps_tracking_ch_ Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_Tracking Tracking_1G.item_type=gr_complex Tracking_1G.early_late_space_chips=0.5 Tracking_1G.pll_bw_hz=25.0; Tracking_1G.dll_bw_hz=3.0; Tracking_1G.dump=false; Tracking_1G.dump_filename=/archive/glo_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false; Observables.dump_filename=/archive/gnss_observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.trop_model=Saastamoinen PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1045_rate_ms=5000 PVT.rtcm_MT1097_rate_ms=1000 PVT.rtcm_MT1077_rate_ms=1000 PVT.rinex_version=3 gnss-sdr-0.0.20/conf/File_input/Glonass/gnss-sdr_GLONASS_L1_CA_ibyte.conf000066400000000000000000000053341477325711200256700ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=6625000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/media/dmiralles/Seagate Backup Plus Drive/GNSS Data/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE ; <- PUT YOUR FILE HERE SignalSource.item_type=ibyte SignalSource.sampling_frequency=6625000 SignalSource.samples=0 SignalSource.dump=false; SignalSource.dump_filename=/archive/signal_glonass.bin ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner DataTypeAdapter.implementation=Ibyte_To_Complex InputFilter.implementation=Pass_Through InputFilter.item_type=gr_complex Resampler.implementation=Pass_Through Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channel.signal=1G Channels.in_acquisition=1 Channels_1G.count=5 Channel0.satellite=24 ; k= Channel1.satellite=1 ; k=1 Channel2.satellite=2 ; k=-4 Channel3.satellite=20 ; k=-5 Channel4.satellite=21 ; k=4 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition Acquisition_1G.item_type=gr_complex Acquisition_1G.threshold=0.0 Acquisition_1G.pfa=0.0001 Acquisition_1G.doppler_max=10000 Acquisition_1G.doppler_step=250 Acquisition_1G.dump=true; Acquisition_1G.dump_filename=/archive/glo_acquisition.dat ;Acquisition_1G.coherent_integration_time_ms=1 ;Acquisition_1G.max_dwells = 5 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_Tracking Tracking_1G.item_type=gr_complex Tracking_1G.early_late_space_chips=0.5 Tracking_1G.pll_bw_hz=25.0; Tracking_1G.dll_bw_hz=3.0; Tracking_1G.dump=true; Tracking_1G.dump_filename=/archive/glo_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=true; Observables.dump_filename=/archive/glo_observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.trop_model=Saastamoinen PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1045_rate_ms=5000 PVT.rtcm_MT1097_rate_ms=1000 PVT.rtcm_MT1077_rate_ms=1000 PVT.rinex_version=2 gnss-sdr-0.0.20/conf/File_input/Glonass/gnss-sdr_GLONASS_L1_CA_ibyte_coh_trk.conf000066400000000000000000000054261477325711200274030ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=6625000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/archive/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE SignalSource.item_type=ibyte SignalSource.sampling_frequency=6625000 SignalSource.samples=0 SignalSource.dump=false; SignalSource.dump_filename=/archive/signal_glonass.bin ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner DataTypeAdapter.implementation=Ibyte_To_Complex InputFilter.implementation=Pass_Through InputFilter.item_type=gr_complex Resampler.implementation=Pass_Through Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channel.signal=1G Channels.in_acquisition=2 Channels_1G.count=8 ;Channel0.satellite=24 ; k=2 ;Channel1.satellite=1 ; k=1 ;Channel2.satellite=2 ; k=-4 ;Channel3.satellite=20 ; k=-5 ;Channel4.satellite=21 ; k=4 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition Acquisition_1G.item_type=gr_complex Acquisition_1G.threshold=0.0 Acquisition_1G.pfa=0.0001 Acquisition_1G.doppler_max=10000 Acquisition_1G.doppler_step=250 Acquisition_1G.dump=false; Acquisition_1G.dump_filename=/archive/glo_acquisition.dat ;Acquisition_1G.coherent_integration_time_ms=1 ;Acquisition_1G.max_dwells = 5 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking Tracking_1G.item_type=gr_complex Tracking_1G.early_late_space_chips=0.5 Tracking_1G.pll_bw_hz=40.0; Tracking_1G.dll_bw_hz=3.0; Tracking_1G.pll_bw_narrow_hz = 25.0; Tracking_1G.dll_bw_narrow_hz = 2.0; Tracking_1G.extend_correlation_ms = 1; Tracking_1G.dump=false; Tracking_1G.dump_filename=/archive/glo_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=/archive/glo_observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.trop_model=Saastamoinen PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1045_rate_ms=5000 PVT.rtcm_MT1097_rate_ms=1000 PVT.rtcm_MT1077_rate_ms=1000 PVT.rinex_version=2 gnss-sdr-0.0.20/conf/File_input/Glonass/gnss-sdr_GLONASS_L1_ibyte.conf000066400000000000000000000067371477325711200253350ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_sps=6625000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/home/dmiralles/Documents/GSOC/GSOC2017/gnss-sdr/data/dmirallesNT1065_L2_20160831_fs6625e6_60e3_schar_1H.bin SignalSource.item_type=ibyte SignalSource.sampling_frequency=6625000 SignalSource.freq=1602000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.sample_type=iq SignalSource.seconds_to_skip=0 SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;DataTypeAdapter.implementation=Ishort_To_Complex DataTypeAdapter.implementation=Ibyte_To_Complex InputFilter.implementation=Pass_Through ;InputFilter.input_item_type=gr_complex ;InputFilter.output_item_type=gr_complex InputFilter.item_type=gr_complex ;Resampler.implementation=Pass_Through ;Resampler.item_type=gr_complex Resampler.implementation=Pass_Through ;Resampler.sample_freq_in=4000000 ;Resampler.sample_freq_out=2000000 ;Resampler.item_type=gr_complex Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_1R.count=8 ;Assuming here that identifier `1r=R` defines GLONASS SP signals Channels.in_acquisition=1 Channel.signal=1R ;Channel.item_type=cshort ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1R.dump=false Acquisition_1R.dump_filename=./acq_dump.dat Acquisition_1R.item_type=cshort Acquisition_1R.sampled_ms=1 Acquisition_1R.implementation=GLONASS_L1_CA_PCPS_Acquisition Acquisition_1R.pfa=0.01 ;Acquisition_1C.pfa=0.000001 Acquisition_1R.doppler_max=10000 Acquisition_1R.doppler_step=250 Acquisition_1R.tong_init_val=2 Acquisition_1R.tong_max_val=10 Acquisition_1R.tong_max_dwells=20 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1R.implementation=GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking Tracking_1R.item_type=cshort Tracking_1R.dump=false Tracking_1R.dump_filename=./epl_tracking_ch_ Tracking_1R.pll_bw_hz=40.0; Tracking_1R.dll_bw_hz=4.0; Tracking_1R.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1R.implementation=GLONASS_L1_CA_Telemetry_Decoder TelemetryDecoder_1R.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false gnss-sdr-0.0.20/conf/File_input/Glonass/gnss-sdr_GLONASS_L2_CA_GPS_L1_CA_ibyte.conf000066400000000000000000000113221477325711200272730ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=6625000 GNSS-SDR.num_sources=2 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource0.implementation=File_Signal_Source SignalSource0.filename=/media/dmiralles/Seagate Backup Plus Drive/GNSS Data/NT1065_L1_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE SignalSource0.item_type=ibyte SignalSource0.sampling_frequency=6625000 SignalSource0.samples=0 SignalSource0.dump=false; SignalSource0.dump_filename=/archive/signal_glonass.bin SignalSource1.implementation=File_Signal_Source SignalSource1.filename=/media/dmiralles/Seagate Backup Plus Drive/GNSS Data/NT1065_GLONASS_L2_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE SignalSource1.item_type=ibyte SignalSource1.sampling_frequency=6625000 SignalSource1.samples=0 SignalSource1.dump=false; SignalSource1.dump_filename=/archive/signal_glonass.bin ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner DataTypeAdapter0.implementation=Ibyte_To_Complex InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.70 InputFilter0.band2_begin=0.80 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=6625000 InputFilter0.IF=60000 Resampler0.implementation=Direct_Resampler Resampler0.sample_freq_in=6625000 Resampler0.sample_freq_out=6625000 Resampler0.item_type=gr_complex SignalConditioner1.implementation=Signal_Conditioner DataTypeAdapter1.implementation=Ibyte_To_Complex InputFilter1.implementation=Pass_Through InputFilter1.item_type=gr_complex Resampler1.implementation=Pass_Through Resampler1.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels.in_acquisition=1 Channels_2G.count=5 Channels_1C.count=5 ;# Defining GLONASS satellites Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=1 Channel6.RF_channel_ID=1 Channel7.RF_channel_ID=1 Channel8.RF_channel_ID=1 Channel9.RF_channel_ID=1 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.threshold=0.0 Acquisition_1C.pfa=0.00001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false; Acquisition_1C.dump_filename=/archive/gps_acquisition.dat ;Acquisition_1C.coherent_integration_time_ms=10 Acquisition_2G.implementation=GLONASS_L2_CA_PCPS_Acquisition Acquisition_2G.item_type=gr_complex Acquisition_2G.threshold=0.0 Acquisition_2G.pfa=0.00001 Acquisition_2G.doppler_max=10000 Acquisition_2G.doppler_step=250 Acquisition_2G.dump=false; Acquisition_2G.dump_filename=/archive/glo_acquisition.dat ;Acquisition_2G.coherent_integration_time_ms=10 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.early_late_space_chips=0.5 Tracking_1C.pll_bw_hz=20.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.dump=false; Tracking_1C.dump_filename=/archive/gps_tracking_ch_ Tracking_2G.implementation=GLONASS_L2_CA_DLL_PLL_Tracking Tracking_2G.item_type=gr_complex Tracking_2G.early_late_space_chips=0.5 Tracking_2G.pll_bw_hz=25.0; Tracking_2G.dll_bw_hz=2.0; Tracking_2G.dump=false; Tracking_2G.dump_filename=/archive/glo_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_2G.implementation=GLONASS_L2_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false; Observables.dump_filename=/archive/gnss_observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.trop_model=Saastamoinen PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1045_rate_ms=5000 PVT.rtcm_MT1097_rate_ms=1000 PVT.rtcm_MT1077_rate_ms=1000 PVT.rinex_version=2 gnss-sdr-0.0.20/conf/File_input/Glonass/gnss-sdr_GLONASS_L2_CA_GPS_L2C_ibyte.conf000066400000000000000000000110071477325711200270340ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=6625000 GNSS-SDR.num_sources=2 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource0.implementation=File_Signal_Source SignalSource0.filename=/archive/NT1065_L2_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE SignalSource0.item_type=ibyte SignalSource0.sampling_frequency=6625000 SignalSource0.samples=0 SignalSource0.dump=false; SignalSource0.dump_filename=/archive/signal_glonass.bin SignalSource1.implementation=File_Signal_Source SignalSource1.filename=/archive/NT1065_GLONASS_L2_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE SignalSource1.item_type=ibyte SignalSource1.sampling_frequency=6625000 SignalSource1.samples=0 SignalSource1.dump=false; SignalSource1.dump_filename=/archive/signal_glonass.bin ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner DataTypeAdapter0.implementation=Ibyte_To_Complex InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.70 InputFilter0.band2_begin=0.80 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=6625000 InputFilter0.IF=60000 Resampler0.implementation=Pass_Through Resampler0.item_type=gr_complex SignalConditioner1.implementation=Signal_Conditioner DataTypeAdapter1.implementation=Ibyte_To_Complex InputFilter1.implementation=Pass_Through InputFilter1.item_type=gr_complex Resampler1.implementation=Pass_Through Resampler1.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels.in_acquisition=5 Channels_2S.count=5 Channels_2G.count=5 ;# Defining GLONASS satellites Channel0.RF_channel_ID=0 Channel0.signal=2S Channel1.RF_channel_ID=0 Channel1.signal=2S Channel2.RF_channel_ID=0 Channel2.signal=2S Channel3.RF_channel_ID=0 Channel3.signal=2S Channel4.RF_channel_ID=0 Channel4.signal=2S Channel5.RF_channel_ID=1 Channel6.RF_channel_ID=1 Channel7.RF_channel_ID=1 Channel8.RF_channel_ID=1 Channel9.RF_channel_ID=1 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.item_type=gr_complex Acquisition_2S.threshold=0.0 Acquisition_2S.pfa=0.00001 Acquisition_2S.doppler_max=10000 Acquisition_2S.doppler_step=60 Acquisition_2S.max_dwells=1 Acquisition_2G.implementation=GLONASS_L2_CA_PCPS_Acquisition Acquisition_2G.item_type=gr_complex Acquisition_2G.threshold=0.0 Acquisition_2G.pfa=0.00001 Acquisition_2G.doppler_max=10000 Acquisition_2G.doppler_step=250 Acquisition_2G.dump=false; Acquisition_2G.dump_filename=/archive/glo_acquisition.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.early_late_space_chips=0.5 Tracking_2S.pll_bw_hz=2.0; Tracking_2S.dll_bw_hz=0.250; Tracking_2S.order=2; Tracking_2S.dump=false; Tracking_2S.dump_filename=/archive/gps_tracking_ch_ Tracking_2G.implementation=GLONASS_L2_CA_DLL_PLL_Tracking Tracking_2G.item_type=gr_complex Tracking_2G.early_late_space_chips=0.5 Tracking_2G.pll_bw_hz=25.0; Tracking_2G.dll_bw_hz=3.0; Tracking_2G.dump=false; Tracking_2G.dump_filename=/archive/glo_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder TelemetryDecoder_2G.implementation=GLONASS_L2_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false; Observables.dump_filename=/archive/gnss_observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.trop_model=Saastamoinen PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1045_rate_ms=5000 PVT.rtcm_MT1097_rate_ms=1000 PVT.rtcm_MT1077_rate_ms=1000 PVT.rinex_version=3 gnss-sdr-0.0.20/conf/File_input/Glonass/gnss-sdr_GLONASS_L2_CA_ibyte.conf000066400000000000000000000050561477325711200256720ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=6625000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/media/dmiralles/Seagate Backup Plus Drive/GNSS Data/NT1065_GLONASS_L2_20160831_fs6625e6_60e3_schar_1m.bin ; <- PUT YOUR FILE HERE SignalSource.item_type=ibyte SignalSource.sampling_frequency=6625000 SignalSource.samples=0 SignalSource.dump=false; SignalSource.dump_filename=/archive/signal_glonass.bin ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner DataTypeAdapter.implementation=Ibyte_To_Complex InputFilter.implementation=Pass_Through InputFilter.item_type=gr_complex Resampler.implementation=Pass_Through Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channel.signal=2G Channels.in_acquisition=1 Channels_2G.count=5 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_2G.implementation=GLONASS_L2_CA_PCPS_Acquisition Acquisition_2G.item_type=gr_complex Acquisition_2G.threshold=0.0 Acquisition_2G.pfa=0.0001 Acquisition_2G.doppler_max=10000 Acquisition_2G.doppler_step=250 Acquisition_2G.dump=true; Acquisition_2G.dump_filename=/archive/glo_acquisition.dat ;Acquisition_2G.coherent_integration_time_ms=1 ;Acquisition_2G.max_dwells = 5 ;######### TRACKING GLOBAL CONFIG ############ Tracking_2G.implementation=GLONASS_L2_CA_DLL_PLL_Tracking Tracking_2G.item_type=gr_complex Tracking_2G.early_late_space_chips=0.5 Tracking_2G.pll_bw_hz=20.0; Tracking_2G.dll_bw_hz=2.0; Tracking_2G.dump=true; Tracking_2G.dump_filename=/archive/glo_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_2G.implementation=GLONASS_L2_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=true; Observables.dump_filename=/archive/glo_observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.trop_model=Saastamoinen PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1045_rate_ms=5000 PVT.rtcm_MT1097_rate_ms=1000 PVT.rtcm_MT1077_rate_ms=1000 PVT.rinex_version=2 gnss-sdr-0.0.20/conf/File_input/Glonass/gnss-sdr_GLONASS_L2_CA_ibyte_coh_trk.conf000066400000000000000000000054261477325711200274040ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=6625000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/archive/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE SignalSource.item_type=ibyte SignalSource.sampling_frequency=6625000 SignalSource.samples=0 SignalSource.dump=false; SignalSource.dump_filename=/archive/signal_glonass.bin ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner DataTypeAdapter.implementation=Ibyte_To_Complex InputFilter.implementation=Pass_Through InputFilter.item_type=gr_complex Resampler.implementation=Pass_Through Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channel.signal=1G Channels.in_acquisition=2 Channels_1G.count=8 ;Channel0.satellite=24 ; k=2 ;Channel1.satellite=1 ; k=1 ;Channel2.satellite=2 ; k=-4 ;Channel3.satellite=20 ; k=-5 ;Channel4.satellite=21 ; k=4 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition Acquisition_1G.item_type=gr_complex Acquisition_1G.threshold=0.0 Acquisition_1G.pfa=0.0001 Acquisition_1G.doppler_max=10000 Acquisition_1G.doppler_step=250 Acquisition_1G.dump=false; Acquisition_1G.dump_filename=/archive/glo_acquisition.dat ;Acquisition_1G.coherent_integration_time_ms=1 ;Acquisition_1G.max_dwells = 5 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking Tracking_1G.item_type=gr_complex Tracking_1G.early_late_space_chips=0.5 Tracking_1G.pll_bw_hz=40.0; Tracking_1G.dll_bw_hz=3.0; Tracking_1G.pll_bw_narrow_hz = 25.0; Tracking_1G.dll_bw_narrow_hz = 2.0; Tracking_1G.extend_correlation_ms = 1; Tracking_1G.dump=false; Tracking_1G.dump_filename=/archive/glo_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=/archive/glo_observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.trop_model=Saastamoinen PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1045_rate_ms=5000 PVT.rtcm_MT1097_rate_ms=1000 PVT.rtcm_MT1077_rate_ms=1000 PVT.rinex_version=2 gnss-sdr-0.0.20/conf/File_input/MultiCons/000077500000000000000000000000001477325711200203025ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/File_input/MultiCons/gnss-sdr_Hybrid_byte.conf000066400000000000000000000112771477325711200252450ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=20000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/media/javier/Extreme 500/fraunhofer/L125_III1b_210s_L1.bin ; <- PUT YOUR FILE HERE SignalSource.item_type=byte SignalSource.sampling_frequency=20000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Ibyte_To_Complex ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Pass_Through InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.item_type=gr_complex Resampler.sample_freq_in=20000000 Resampler.sample_freq_out=20000000 Resampler.dump=false Resampler.dump_filename=./resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=10 Channels_1B.count=10 Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1G" GLONASS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "5X" GALILEO E5a I+Q ;# "L5" GPS L5 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C Channel8.signal=1B Channel9.signal=1B Channel10.signal=1B Channel11.signal=1B Channel12.signal=1B Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B Channel16.signal=1B Channel17.signal=1B Channel18.signal=1B Channel19.signal=1B ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.threshold=3.5 Acquisition_1C.blocking=true Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### GALILEO ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.threshold=2.5 Acquisition_1B.blocking=true Acquisition_1B.doppler_max=5000 Acquisition_1B.doppler_step=125 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.extend_correlation_ms=1 Tracking_1C.pll_bw_hz=40; Tracking_1C.pll_bw_narrow_hz=30; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.dll_bw_narrow_hz=1.5; Tracking_1C.order=2; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=15.0; Tracking_1B.dll_bw_hz=3.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GALILEO CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=10; PVT.display_rate_ms=500; PVT.elevation_mask=15; PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/MultiCons/gnss-sdr_Hybrid_byte_sim.conf000066400000000000000000000105111477325711200261030ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2600000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/Users/carlesfernandez/git/cttc/build/signal_out.bin ; <- PUT YOUR FILE HERE SignalSource.item_type=byte SignalSource.sampling_frequency=4000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Ibyte_To_Complex DataTypeAdapter.dump=false DataTypeAdapter.dump_filename=./DataTypeAdapter.dat ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Pass_Through InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.item_type = gr_complex; ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=11 Channels_1B.count=0 Channels.in_acquisition=1 ;#signal: Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C Channel8.signal=1C Channel9.signal=1C Channel10.signal=1C Channel11.signal=1C Channel12.signal=1C Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=2.5 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=6000 Acquisition_1C.doppler_step=100 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### GALILEO ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 ;Acquisition_1B.threshold=0 Acquisition_1B.pfa=0.0000008 Acquisition_1B.doppler_max=15000 Acquisition_1B.doppler_step=125 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=20.0; Tracking_1C.dll_bw_hz=1.5; Tracking_1C.order=3; ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ Tracking_1B.pll_bw_hz=15.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GALILEO CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100; PVT.display_rate_ms=500; PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/MultiCons/gnss-sdr_Hybrid_gr_complex.conf000066400000000000000000000077171477325711200264450ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4092000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/signals/sim/GPS_sim1.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=gr_complex SignalSource.sampling_frequency=4092000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=1 Channels_1B.count=0 Channels.in_acquisition=1 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1B Channel2.signal=1B Channel3.signal=1B Channel4.signal=1B Channel5.signal=1B Channel6.signal=1B Channel7.signal=1B Channel8.signal=1B Channel9.signal=1B Channel10.signal=1B Channel11.signal=1B Channel12.signal=1B Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=2.5 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=100 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### GALILEO ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 ;Acquisition_1B.threshold=0 Acquisition_1B.pfa=0.0000002 Acquisition_1B.doppler_max=15000 Acquisition_1B.doppler_step=125 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.extend_correlation_ms=10 Tracking_1C.pll_bw_hz=40; Tracking_1C.pll_bw_narrow_hz=25; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.dll_bw_narrow_hz=2.0; Tracking_1C.order=3; Tracking_1C.dump=true Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=15.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.fll_bw_hz=10.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GALILEO CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=10; PVT.display_rate_ms=500; PVT.dump=false PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/MultiCons/gnss-sdr_Hybrid_ishort.conf000066400000000000000000000122421477325711200256030ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=ishort SignalSource.sampling_frequency=4000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Ishort_To_Complex ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Pass_Through InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.item_type=gr_complex Resampler.dump=false Resampler.dump_filename=./resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=0 Channels_1B.count=5 Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q Channel0.signal=1B Channel1.signal=1B Channel2.signal=1B Channel3.signal=1B Channel4.signal=1B Channel5.signal=1B Channel6.signal=1B Channel7.signal=1B ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.015 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### GALILEO ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 ;Acquisition_1B.threshold=0 Acquisition_1B.pfa=0.0000008; 0.0000008 Acquisition_1B.doppler_max=15000 Acquisition_1B.doppler_step=125 Acquisition_1B.cboc=false; Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=50.0; Tracking_1C.dll_bw_hz=5.0; Tracking_1C.order=3; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=20.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GALILEO CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100; PVT.display_rate_ms=500; PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1045_rate_ms=5000 ; Period (in ms) of Galileo ephemeris messages. 0 mutes this message PVT.rtcm_MT1045_rate_ms=5000 ; Period (in ms) of GPS ephemeris messages. 0 mutes this message PVT.rtcm_MT1097_rate_ms=1000 ; Period (in ms) of Galileo observables. 0 mutes this message PVT.rtcm_MT1077_rate_ms=1000 ; Period (in ms) of GPS observables. 0 mutes this message PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/MultiCons/gnss-sdr_labsat_kf.conf000066400000000000000000000136421477325711200247250ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2021 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=5456000 GNSS-SDR.use_acquisition_resampler=true ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Labsat_Signal_Source SignalSource.selected_channel=1 ;#filename: path to file with the captured GNSS signal samples to be processed ;# Labsat sile source automatically increments the file name when the signal is split in several files ;# the adapter adds "_0000.LS3" to this base path and filename. Next file will be "_0001.LS3" and so on ;# in this example, the first file complete path will be ../signals/GPS_025_ SignalSource.filename=/home/javier/signals/satgen_30mins/output/output SignalSource.item_type=gr_complex SignalSource.sampling_frequency=16368000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./out.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=gr_complex ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=/media/javier/WDNASNTFS/output_5.456Msps_gr_complex.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=lowpass InputFilter.grid_density=16 InputFilter.sampling_frequency=16368000 InputFilter.IF=0 InputFilter.decimation_factor=3 ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=6 Channels_1B.count=0 Channels_L5.count=0 Channels_5X.count=0 Channels.in_acquisition=1 ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.threshold=3.0 Acquisition_1C.use_CFAR_algorithm=false Acquisition_1C.blocking=true Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=125 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### GALILEO ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.threshold=2.8 Acquisition_1B.use_CFAR_algorithm=false Acquisition_1B.blocking=false Acquisition_1B.doppler_max=5000 Acquisition_1B.doppler_step=125 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_KF_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.dump=true Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.extend_correlation_symbols=20; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.early_late_space_narrow_chips=0.15 ;Tracking_1C.code_disc_sd_chips=0.2; // Initial R ;Tracking_1C.carrier_disc_sd_rads=0.3; // Initial R ;Tracking_1C.init_code_phase_sd_chips=0.5; // Initial P_0_0 ;Tracking_1C.init_carrier_phase_sd_rad=0.7; ;Tracking_1C.init_carrier_freq_sd_hz=5; ;Tracking_1C.init_carrier_freq_rate_sd_hz_s=1; ;Tracking_1C.code_phase_sd_chips=0.15; // Initial Q ;Tracking_1C.carrier_phase_sd_rad=0.25; ;Tracking_1C.carrier_freq_sd_hz=0.6; ;Tracking_1C.carrier_freq_rate_sd_hz_s=0.01; ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=15.0; Tracking_1B.dll_bw_hz=0.75; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.5; Tracking_1B.early_late_space_narrow_chips=0.10; Tracking_1B.very_early_late_space_narrow_chips=0.5; Tracking_1B.pll_bw_narrow_hz=2.5 Tracking_1B.dll_bw_narrow_hz=0.2 Tracking_1B.extend_correlation_symbols=5 Tracking_1B.track_pilot=true Tracking_1B.enable_fll_pull_in=true; ;Tracking_1B.pull_in_time_s=60 Tracking_1B.enable_fll_steady_state=false Tracking_1B.fll_bw_hz=10 Tracking_1B.dump=false Tracking_1B.dump_filename=tracking_ch_ ;######### TELEMETRY DECODER GALILEO CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat Observables.enable_carrier_smoothing=false Observables.smoothing_factor=200 ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.enable_rx_clock_correction=false PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=1000; PVT.rinexobs_rate_ms=1000; PVT.display_rate_ms=1000; PVT.elevation_mask=15; PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT PVT.enable_monitor=false PVT.monitor_udp_port=1337 PVT.monitor_client_addresses=127.0.0.1 ;######### MONITOR CONFIG ############ Monitor.enable_monitor=false Monitor.decimation_factor=1 Monitor.client_addresses=127.0.0.1 Monitor.udp_port=1234 gnss-sdr_multichannel_all_in_one_Flexiband_bin_file_III_1b.conf000066400000000000000000000275741477325711200344520ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/File_input/MultiCons; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=5000000 GNSS-SDR.Galileo_banned_prns=14,18 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true SignalSource.signal_file=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE SignalSource.item_type=gr_complex SignalSource.firmware_file=flexiband_III-1b.bit SignalSource.RF_channels=3 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 SignalSource.AGC=true SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.dump=false InputFilter0.dump_filename=./input_filter_ch0.dat InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.IF=0 InputFilter0.decimation_factor=4 ;######### RESAMPLER CONFIG 0 ############ Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Freq_Xlating_Fir_Filter InputFilter1.dump=false InputFilter1.dump_filename=./input_filter_ch1.dat InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex InputFilter1.taps_item_type=float InputFilter1.number_of_taps=5 InputFilter1.number_of_bands=2 InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 InputFilter1.filter_type=bandpass InputFilter1.grid_density=16 InputFilter1.IF=0 InputFilter1.decimation_factor=4 ;######### RESAMPLER CONFIG 1 ############ Resampler1.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 2 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 2 CONFIG ############ SignalConditioner2.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Freq_Xlating_Fir_Filter InputFilter2.dump=false InputFilter2.dump_filename=./input_filter_ch2.dat InputFilter2.input_item_type=gr_complex InputFilter2.output_item_type=gr_complex InputFilter2.taps_item_type=float InputFilter2.number_of_taps=5 InputFilter2.number_of_bands=2 InputFilter2.band1_begin=0.0 InputFilter2.band1_end=0.45 InputFilter2.band2_begin=0.55 InputFilter2.band2_end=1.0 InputFilter2.ampl1_begin=1.0 InputFilter2.ampl1_end=1.0 InputFilter2.ampl2_begin=0.0 InputFilter2.ampl2_end=0.0 InputFilter2.band1_error=1.0 InputFilter2.band2_error=1.0 InputFilter2.filter_type=bandpass InputFilter2.grid_density=16 InputFilter2.IF=0 InputFilter2.decimation_factor=8 ;######### RESAMPLER CONFIG 2 ############ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=10 Channels_1B.count=10 Channels_2S.count=10 Channels_5X.count=2 Channels_L5.count=2 ;#GPS.prns=7,8 ;Channels.in_acquisition=2 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 Channel8.RF_channel_ID=0 Channel9.RF_channel_ID=0 Channel10.RF_channel_ID=1 Channel11.RF_channel_ID=1 Channel12.RF_channel_ID=1 Channel13.RF_channel_ID=1 Channel14.RF_channel_ID=1 Channel15.RF_channel_ID=1 Channel16.RF_channel_ID=1 Channel17.RF_channel_ID=1 Channel18.RF_channel_ID=1 Channel19.RF_channel_ID=1 Channel20.RF_channel_ID=0 Channel21.RF_channel_ID=0 Channel22.RF_channel_ID=0 Channel23.RF_channel_ID=0 Channel24.RF_channel_ID=0 Channel25.RF_channel_ID=0 Channel26.RF_channel_ID=0 Channel27.RF_channel_ID=0 Channel28.RF_channel_ID=0 Channel29.RF_channel_ID=0 Channel30.RF_channel_ID=2 Channel31.RF_channel_ID=2 Channel32.RF_channel_ID=2 Channel33.RF_channel_ID=2 Channel34.RF_channel_ID=2 Channel35.RF_channel_ID=2 Channel36.RF_channel_ID=2 Channel37.RF_channel_ID=2 Channel38.RF_channel_ID=2 Channel39.RF_channel_ID=2 Channel40.RF_channel_ID=2 Channel41.RF_channel_ID=2 Channel42.RF_channel_ID=2 ;Channel20.satellite=7 ;# GPS L1 CA Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=250 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;# Galileo E1 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 ;Acquisition_1B.threshold=0 Acquisition_1B.pfa=0.0000002 Acquisition_1B.doppler_max=5000 Acquisition_1B.doppler_step=125 Acquisition_1B.dump_filename=./acq_dump.dat ;# GPS L2C M Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.item_type=gr_complex Acquisition_2S.pfa=0.01 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_min=-5000 Acquisition_2S.doppler_step=60 Acquisition_2S.max_dwells=1 Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat ;# GALILEO E5a Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF Acquisition_5X.item_type=gr_complex Acquisition_5X.coherent_integration_time_ms=1 Acquisition_5X.threshold=0.009 Acquisition_5X.doppler_max=5000 Acquisition_5X.doppler_step=125 Acquisition_5X.bit_transition_flag=false Acquisition_5X.max_dwells=1 Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is deactivated. Recommended value 3000 Hz Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF. Acquisition_5X.dump=false Acquisition_5X.dump_filename=./acq_dump.dat ;# GPS L5 Acquisition_L5.implementation=GPS_L5i_PCPS_Acquisition Acquisition_L5.item_type=gr_complex Acquisition_L5.pfa=0.01 ;Acquisition_L5.pfa=0.001 Acquisition_L5.doppler_max=5000 Acquisition_L5.doppler_min=-5000 Acquisition_L5.doppler_step=125 Acquisition_L5.max_dwells=1 Acquisition_L5.dump=false Acquisition_L5.dump_filename=./acq_dump.dat ;######### TRACKING CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=35.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### GALILEO E1 TRK CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=15.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### GPS L2C GENERIC TRACKING CONFIG ############ Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.pll_bw_hz=2.0; Tracking_2S.dll_bw_hz=0.25; Tracking_2S.order=2; Tracking_2S.early_late_space_chips=0.5; Tracking_2S.dump=false Tracking_2S.dump_filename=./tracking_ch_ ;######### GALILEO E5 TRK CONFIG ############ Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking Tracking_5X.item_type=gr_complex Tracking_5X.track_pilot=true Tracking_5X.pll_bw_hz=15.0; Tracking_5X.dll_bw_hz=2.0; Tracking_5X.pll_bw_narrow_hz=5.0; Tracking_5X.dll_bw_narrow_hz=1.0; Tracking_5X.order=2; Tracking_5X.early_late_space_chips=0.5; Tracking_5X.dump=false Tracking_5X.dump_filename=./tracking_ch_ ;######### GALILEO E5 TRK CONFIG ############ Tracking_L5.implementation=GPS_L5_DLL_PLL_Tracking Tracking_L5.item_type=gr_complex Tracking_L5.track_pilot=true Tracking_L5.pll_bw_hz=15.0; Tracking_L5.dll_bw_hz=2.0; Tracking_L5.pll_bw_narrow_hz=4.0; Tracking_L5.dll_bw_narrow_hz=1.0; Tracking_L5.order=2; Tracking_L5.early_late_space_chips=0.5; Tracking_L5.dump=false Tracking_L5.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder TelemetryDecoder_2S.dump=false TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder TelemetryDecoder_5X.dump=false TelemetryDecoder_L5.implementation=GPS_L5_Telemetry_Decoder TelemetryDecoder_L5.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=10 PVT.display_rate_ms=100 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/File_input/MultiCons/gnss-sdr_multisource_Hybrid_ishort.conf000066400000000000000000000121131477325711200302330ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 GNSS-SDR.num_sources=2 SignalSource.enable_throttle_control=false SignalSource.repeat=false ;######### SIGNAL_SOURCE 0 CONFIG ############ SignalSource0.implementation=File_Signal_Source SignalSource0.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE SignalSource0.item_type=ishort SignalSource0.sampling_frequency=4000000 SignalSource0.samples=0 ;######### SIGNAL_SOURCE 1 CONFIG ############ SignalSource1.implementation=File_Signal_Source SignalSource1.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE SignalSource1.item_type=ishort SignalSource1.sampling_frequency=4000000 SignalSource1.freq=1575420000 SignalSource1.samples=0 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Ishort_To_Complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Pass_Through InputFilter0.dump=false InputFilter0.dump_filename=./input_filter.dat InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex ;######### RESAMPLER 1 CONFIG ############ Resampler1.implementation=Pass_Through Resampler1.dump=false Resampler1.dump_filename=./resampler.dat Resampler1.item_type=gr_complex Resampler1.sample_freq_in=4000000 Resampler1.sample_freq_out=4000000 ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Ishort_To_Complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through InputFilter1.dump=false ;######### RESAMPLER 1 CONFIG ############ Resampler1.implementation=Pass_Through Resampler1.dump=false Resampler1.dump_filename=./resampler.dat. Resampler1.item_type=gr_complex Resampler1.sample_freq_in=4000000 Resampler1.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=2 Channels_1B.count=2 Channels.in_acquisition=1 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=1 Channel3.RF_channel_ID=1 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1B ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.015 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### GALILEO ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 ;Acquisition_1B.threshold=0 Acquisition_1B.pfa=0.0000008 Acquisition_1B.doppler_max=15000 Acquisition_1B.doppler_step=125 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=4.0; Tracking_1C.order=3; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=15.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GALILEO CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.output_rate_ms=100; PVT.display_rate_ms=500; PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump_filename=./PVT PVT.dump=false gnss-sdr-0.0.20/conf/File_input/MultiCons/gnss-sdr_multisource_Hybrid_nsr.conf000066400000000000000000000154601477325711200275350ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] GNSS-SDR.num_sources=2 ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. ;GNSS-SDR.internal_fs_sps=6826700 GNSS-SDR.internal_fs_sps=2560000 ;GNSS-SDR.internal_fs_sps=4096000 ;GNSS-SDR.internal_fs_sps=5120000 SignalSource.enable_throttle_control=false SignalSource.repeat=false ;######### SIGNAL_SOURCE 0 CONFIG ############ SignalSource0.implementation=Nsr_File_Signal_Source SignalSource0.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE SignalSource0.item_type=byte SignalSource0.sampling_frequency=20480000 SignalSource0.samples=0 ;######### SIGNAL_SOURCE 1 CONFIG ############ SignalSource1.implementation=Nsr_File_Signal_Source SignalSource1.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream SignalSource1.item_type=byte SignalSource1.sampling_frequency=20480000 SignalSource1.samples=0 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=float ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.dump=false InputFilter0.dump_filename=./input_filter.dat InputFilter0.input_item_type=float InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.number_of_taps=5 InputFilter0.number_of_bands=2 InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 InputFilter0.filter_type=bandpass InputFilter0.grid_density=16 InputFilter0.sampling_frequency=20480000 InputFilter0.IF=5499998.47412109 InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=float ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Freq_Xlating_Fir_Filter InputFilter1.dump=false InputFilter1.dump_filename=./input_filter.dat InputFilter1.input_item_type=float InputFilter1.output_item_type=gr_complex InputFilter1.taps_item_type=float InputFilter1.number_of_taps=5 InputFilter1.number_of_bands=2 InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 InputFilter1.filter_type=bandpass InputFilter1.grid_density=16 InputFilter1.sampling_frequency=20480000 InputFilter1.IF=5499998.47412109 InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ Resampler1.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels_1B.count=8 Channels.in_acquisition=1 ;# SOURCE CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 Channel8.RF_channel_ID=1 Channel9.RF_channel_ID=1 Channel10.RF_channel_ID=1 Channel11.RF_channel_ID=1 Channel12.RF_channel_ID=1 Channel13.RF_channel_ID=1 Channel14.RF_channel_ID=1 Channel15.RF_channel_ID=1 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1B Channel8.signal=1B Channel9.signal=1B Channel10.signal=1B Channel11.signal=1B Channel12.signal=1B Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.scoherent_integration_time_ms=1 Acquisition_1C.pfa=0.015 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### GALILEO ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 ;Acquisition_1B.threshold=0 Acquisition_1B.pfa=0.0000002 Acquisition_1B.doppler_max=15000 Acquisition_1B.doppler_step=125 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=15.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GALILEO CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=true; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/Nsr_input/000077500000000000000000000000001477325711200162505ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/Nsr_input/gnss-sdr_GPS_L1_nsr.conf000066400000000000000000000124651477325711200226160ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; Sample configuration file for IFEN SX-NSR software receiver front-end ; https://www.ifen.com/products/sx3-gnss-software-receiver/ ; This sample configuration is able to process directly .sream binary files ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2560000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Nsr_File_Signal_Source SignalSource.filename=/home/javier/Descargas/RoofTop_FE0_Band1.stream ; <- PUT YOUR FILE HERE SignalSource.item_type=byte SignalSource.sampling_frequency=20480000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat InputFilter.input_item_type=float InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=20480000 #InputFilter.IF=5499998.47412109 InputFilter.IF=5679999.2370605494 InputFilter.decimation_factor=8 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=./resampler.dat Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=0 Channels_2S.count=8 Channels.in_acquisition=1 ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.scoherent_integration_time_ms=1 Acquisition_1C.pfa=0.015 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.item_type=gr_complex Acquisition_2S.coherent_integration_time_ms=20 Acquisition_2S.pfa=0.01 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_step=100 Acquisition_2S.bit_transition_flag=false Acquisition_2S.max_dwells=1 Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### GPS L2C GENERIC TRACKING CONFIG ############ Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.pll_bw_hz=1.5; Tracking_2S.dll_bw_hz=0.4; Tracking_2S.order=2; Tracking_2S.early_late_space_chips=0.5; Tracking_2S.dump=true Tracking_2S.dump_filename=./epl_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder TelemetryDecoder_2S.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=true gnss-sdr-0.0.20/conf/Nsr_input/gnss-sdr_GPS_L1_nsr_gauss.conf000066400000000000000000000172401477325711200240140ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. ;GNSS-SDR.internal_fs_sps=6826700 GNSS-SDR.internal_fs_sps=2560000 ;GNSS-SDR.internal_fs_sps=4096000 ;GNSS-SDR.internal_fs_sps=5120000 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] SignalSource.implementation=Nsr_File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/home/javier/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=byte ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=20480000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation ;# that shifts IF down to zero Hz. InputFilter.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=./input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse ;#response given a set of band edges, the desired response on those bands, ;#and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=float ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;# Original sampling frequency stored in the signal file InputFilter.sampling_frequency=20480000 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.IF=5499998.47412109 ;# Decimation factor after the frequency tranaslating block InputFilter.decimation_factor=8 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neighbourhood interpolation Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 Channels.in_acquisition=1 #Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 Acquisition_1C.sampled_ms=1 Acquisition_1C.threshold=2.5 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=100 ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_Gaussian_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=true Tracking_1C.dump_filename=./epl_tracking_ch_ Tracking_1C.pll_bw_hz=15.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Observables.implementation=Hybrid_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=true gnss-sdr-0.0.20/conf/Nsr_input/gnss-sdr_Hybrid_nsr.conf000066400000000000000000000122231477325711200230420ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2560000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Nsr_File_Signal_Source SignalSource.filename=/home/javier/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE SignalSource.item_type=byte SignalSource.sampling_frequency=20480000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.input_item_type=float InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=20480000 InputFilter.IF=5499998.47412109 InputFilter.decimation_factor=8 InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=10 Channels_1B.count=10 Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1G" GLONASS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "5X" GALILEO E5a I+Q ;# "L5" GPS L5 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C Channel8.signal=1C Channel9.signal=1C Channel10.signal=1B Channel11.signal=1B Channel12.signal=1B Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B Channel16.signal=1B Channel17signal=1B Channel18.signal=1B Channel19.signal=1B ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.threshold=2.5 Acquisition_1C.blocking=true Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### GALILEO ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.threshold=2.5 Acquisition_1B.blocking=true Acquisition_1B.doppler_max=5000 Acquisition_1B.doppler_step=250 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.extend_correlation_ms=1 Tracking_1C.pll_bw_hz=40; Tracking_1C.pll_bw_narrow_hz=30; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.dll_bw_narrow_hz=1.5; Tracking_1C.order=2; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=20.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GALILEO CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=10; PVT.display_rate_ms=500; PVT.elevation_mask=20; PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/Other/000077500000000000000000000000001477325711200153505ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/Other/front-end-cal.conf000066400000000000000000000200551477325711200206520ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; Default configuration file ; You can define your own front-end calibration tool configuration and invoke it by doing ; ./front-end-cal --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### INITIAL RECEIVER POSITIION ###### ; san francisco scenario ;GNSS-SDR.init_latitude_deg=40.74846557442795 ;GNSS-SDR.init_longitude_deg=-73.98593961814200 ;GNSS-SDR.init_altitude_m=329.11968943169342 ; Barcelona CTTC ;GNSS-SDR.init_latitude_deg=41.27719585553101 ;GNSS-SDR.init_longitude_deg=1.988782985790802 ;GNSS-SDR.init_altitude_m=10 ; Mozoncillo ;GNSS-SDR.init_latitude_deg=41.14534824586196 ;GNSS-SDR.init_longitude_deg=-4.187125019737464 ;GNSS-SDR.init_altitude_m=900 ; ICEBAR - Jukkasjarvi GNSS-SDR.init_latitude_deg=67.849722 GNSS-SDR.init_longitude_deg=20.594444 GNSS-SDR.init_altitude_m=325 ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2048000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=true GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=240 GNSS-SDR.SUPL_MNC=08 GNSS-SDR.SUPL_LAC=46003 GNSS-SDR.SUPL_CI=425950 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Osmosdr_Signal_Source ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in samples per second SignalSource.sampling_frequency=2048000 ;#gain: Front-end Gain in [dB] SignalSource.gain=40 SignalSource.rf_gain=40 SignalSource.if_gain=30 SignalSource.AGC_enabled=false ;# Please note that the new RTL-SDR Blog V3 dongles ship a < 1 PPM ;# temperature compensated oscillator (TCXO), which is well suited for GNSS ;# signal processing, and a 4.5 V powered bias-tee to feed an active antenna. ;# Whether the bias-tee is turned off before reception depends on which version ;# of gr-osmosdr was used when compiling GNSS-SDR. With an old version ;# (for example, v0.1.4-8), the utility rtl_biast may be used to switch the ;# bias-tee, and then call gnss-sdr. ;# See https://github.com/rtlsdrblog/rtl_biast ;# After reception the bias-tee is switched off automatically by the program. ;# With newer versions of gr-osmosdr (>= 0.1.4-13), the bias-tee can be ;# activated by uncommenting the following line: ;SignalSource.osmosdr_args=rtl,bias=1 ;#samples: Number of samples to be processed. Notice that 0 means infinite samples. SignalSource.samples=0 ;#repeat: Repeat the processing file. SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=./data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Freq_Xlating_Fir_Filter ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, ;#the desired response on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=2000000 InputFilter.IF=0 InputFilter.decimation_factor=1 ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block Resampler.implementation=Pass_Through ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=1 ;#threshold: Acquisition threshold Acquisition.threshold=0.015 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_max=100000 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_min=-100000 ;#doppler_step Doppler step in the grid search [Hz] Acquisition.doppler_step=500 ;#maximum dwells Acquisition.max_dwells=15 ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat gnss-sdr-0.0.20/conf/Other/gnss-sdr_GPS_L1_2ch_udp.conf000066400000000000000000000063241477325711200224350ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [Sps]. GNSS-SDR.internal_fs_sps=13250000 ;//66.25/5 ;GNSS-SDR.internal_fs_sps=6625000 ;//66.25/10 ;GNSS-SDR.internal_fs_sps=3312500 ;//66.25/20 ;GNSS-SDR.internal_fs_sps=2650000 ;//66.25/25 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Custom_UDP_Signal_Source SignalSource.item_type=gr_complex SignalSource.origin_address=0.0.0.0 SignalSource.capture_device=eth0 SignalSource.port=1234 SignalSource.payload_bytes=1472 ;SignalSource.sample_type=cbyte SignalSource.sample_type=c4bits SignalSource.IQ_swap=false SignalSource.RF_channels=1 SignalSource.channels_in_udp=2 SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;SignalConditioner0.implementation=Pass_Through ;SignalConditioner1.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 ;# CHANNEL CONNECTION Channel.signal=1C Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 Channel8.RF_channel_ID=1 Channel9.RF_channel_ID=1 ;Channel0.signal=1C ;Channel1.RF_channel_ID=1 ;Channel1.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.threshold=2.5 Acquisition_1C.blocking=false Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.pll_bw_hz=35.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false gnss-sdr-0.0.20/conf/Other/gnss-sdr_GPS_L1_FPGA.conf000066400000000000000000000042521477325711200216240ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=12500000 GNSS-SDR.enable_FPGA=true ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Ad9361_Fpga_Signal_Source SignalSource.sampling_frequency=12500000 SignalSource.freq=1575420000 SignalSource.switch_position=2 SignalSource.gain_mode_rx1=slow_attack ;######### CHANNELS GLOBAL CONFIG ############ Channels.in_acquisition=1 Channels_1C.count=12 ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fpga Acquisition_1C.threshold=2.0 Acquisition_1C.doppler_max=50000 Acquisition_1C.doppler_step=250 Acquisition_1C.make_two_steps=true Acquisition_1C.second_nbins=3 Acquisition_1C.doppler_step2=250 Acquisition_1C.max_num_acqs=100 ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking_Fpga Tracking_1C.extend_correlation_symbols=20 Tracking_1C.pll_bw_hz=35; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.pll_bw_narrow_hz=5.0; Tracking_1C.dll_bw_narrow_hz=0.50; Tracking_1C.fll_bw_hz=10 Tracking_1C.enable_fll_pull_in=true; Tracking_1C.enable_fll_steady_state=false Tracking_1C.high_dyn=true Tracking_1C.dump=false Tracking_1C.dump_filename=tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single PVT.iono_model=OFF PVT.trop_model=OFF PVT.raim_fde=1 PVT.output_rate_ms=20; PVT.display_rate_ms=500; PVT.elevation_mask=0; PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/Other/gnss-sdr_GPS_L1_fifo.conf000066400000000000000000000035121477325711200220300ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2021 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=25000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Fifo_Signal_Source SignalSource.filename=fifo.fifo ; example usage: mkfifo fifo.fifo && cat path_to.bin >> fifo.fifo SignalSource.sample_type=ishort; ; sample representation in fifo stream - will always output gr_complex SignalSource.dump=false ;SignalSource.dump_filename=dump ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=4.0; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.iono_model=Broadcast PVT.trop_model=Saastamoinen PVT.output_path=./files gnss-sdr-0.0.20/conf/Other/gnss-sdr_GPS_L1_gr_complex_gpu.conf000066400000000000000000000053321477325711200241210ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/signals/Agilent/New York/4msps.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=gr_complex SignalSource.samples=250000000 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=0.005 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU Tracking_1C.item_type=gr_complex Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false gnss-sdr-0.0.20/conf/Other/gnss-sdr_GPS_L1_monitor.conf000066400000000000000000000053411477325711200225760ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=2000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/tmp/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat SignalSource.item_type=ishort SignalSource.sampling_frequency=4000000 SignalSource.freq=1575420000 SignalSource.samples=0 SignalSource.enable_throttle_control=true ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Ishort_To_Complex ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Pass_Through InputFilter.item_type=gr_complex ;######### RESAMPLER CONFIG ############ Resampler.implementation=Direct_Resampler Resampler.sample_freq_in=4000000 Resampler.sample_freq_out=2000000 Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=3 Channels.in_acquisition=1 Channel.signal=1C Channel0.satellite=1 Channel1.satellite=11 Channel2.satellite=17 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.threshold=0.008 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=4.0; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.averaging_depth=100 PVT.flag_averaging=true PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.enable_monitor=true PVT.monitor_client_addresses=127.0.0.1 PVT.monitor_udp_port=1234 ;######### MONITOR CONFIG ############ Monitor.enable_monitor=true Monitor.decimation_factor=1 Monitor.client_addresses=127.0.0.1 Monitor.udp_port=1233 ;######### ACQUISITION MONITOR CONFIG ############ AcquisitionMonitor.enable_monitor=true AcquisitionMonitor.decimation_factor=1 AcquisitionMonitor.client_addresses=127.0.0.1 AcquisitionMonitor.udp_port=1231 ;######### TRACKING MONITOR CONFIG ############ TrackingMonitor.enable_monitor=true TrackingMonitor.decimation_factor=1 TrackingMonitor.client_addresses=127.0.0.1 TrackingMonitor.udp_port=1232 gnss-sdr-0.0.20/conf/Other/gnss-sdr_GPS_L1_nsr_twobit_packed.conf000066400000000000000000000122511477325711200246060ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; Sample configuration file for IFEN SX-NSR software receiver front-end ; https://www.ifen.com/products/sx3-gnss-software-receiver/ ; This sample configuration is able to process directly .sream binary files ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2560000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Two_Bit_Packed_File_Signal_Source SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE SignalSource.item_type=byte ; big_endian_items : not needed for byte inputs ; If the input were 'short' then this can either be big endian or little ; endian. If it is big endian then the second byte should be output ; first in each short. ; SignalSource.big_endian_items=false ; big_endian_bytes: true if the most significant two bits in the byte ; are the first two to be output. SignalSource.big_endian_bytes=false ; sample_type: one of 'real' 'iq' or 'qi' ; Data is either real or complex. ; if the data is complex there are two conventions for sample ordering: ; 1) Real first : 'iq' ; 2) Imaginary first: 'qi' ; This setting specifies which of the three cases holds for this data file SignalSource.sample_type=real SignalSource.sampling_frequency=20480000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat InputFilter.input_item_type=float InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=20480000 InputFilter.IF=5499998.47412109 InputFilter.decimation_factor=8 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=./resampler.dat Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 Channel.signal=1C ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.sampled_ms=1 Acquisition_1C.pfa=0.015 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=true gnss-sdr-0.0.20/conf/Other/gnss-sdr_GPS_L1_pulse_blanking_gr_complex.conf000066400000000000000000000070731477325711200263270ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/home/javier/signals/signal_source_int.dat SignalSource.item_type=gr_complex SignalSource.sampling_frequency=2000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=dump.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Pulse_Blanking_Filter InputFilter.Pfa=0.001 InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=8 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=2.5 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.extend_correlation_ms=10 Tracking_1C.pll_bw_hz=35; Tracking_1C.pll_bw_narrow_hz=30; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.dll_bw_narrow_hz=1.5; Tracking_1C.fll_bw_hz=2.0; Tracking_1C.order=3; Tracking_1C.dump=true Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=true Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=1 PVT.display_rate_ms=100 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false gnss-sdr-0.0.20/conf/Other/gnss-sdr_GPS_L1_two_bits_cpx.conf000066400000000000000000000106021477325711200236070ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=3200000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Two_Bit_Cpx_File_Signal_Source SignalSource.filename=/datalogger/captures/ajith/test1_two_cpx_live.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=byte SignalSource.sampling_frequency=19200000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=gr_complex ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=19200000 InputFilter.IF=4024000 InputFilter.decimation_factor=6 InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=./resampler.dat Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=6 Channels.in_acquisition=1 Channel.signal=1C ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 ;Acquisition_1C.pfa=0.0001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_min=-10000 Acquisition_1C.doppler_step=500 Acquisition_1C.max_dwells=15 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=1.5; Tracking_1C.order=3; Tracking_1C.dump=true Tracking_1C.dump_filename=./tracking_ch ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false gnss-sdr-0.0.20/conf/Other/gnss-sdr_GPS_L1_udp_with_monitor.conf000066400000000000000000000051201477325711200244740ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [Sps] GNSS-SDR.internal_fs_sps=4000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Custom_UDP_Signal_Source SignalSource.item_type=gr_complex SignalSource.origin_address=127.0.0.1 SignalSource.capture_device=lo SignalSource.port=1230 ;SignalSource.payload_bytes=1472 # Not used! Size is retrieved from UDP Packet SignalSource.sample_type=cfloat SignalSource.IQ_swap=true SignalSource.RF_channels=1 SignalSource.channels_in_udp=1 SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=3 Channels.in_acquisition=1 Channel.signal=1C Channel0.satellite=1 Channel1.satellite=11 Channel2.satellite=17 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.threshold=0.008 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=4.0; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.averaging_depth=100 PVT.flag_averaging=true PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.enable_monitor=true PVT.monitor_client_addresses=127.0.0.1 PVT.monitor_udp_port=1234 ;######### MONITOR CONFIG ############ Monitor.enable_monitor=true Monitor.decimation_factor=1 Monitor.client_addresses=127.0.0.1 Monitor.udp_port=1233 ;######### ACQUISITION MONITOR CONFIG ############ AcquisitionMonitor.enable_monitor=true AcquisitionMonitor.decimation_factor=1 AcquisitionMonitor.client_addresses=127.0.0.1 AcquisitionMonitor.udp_port=1231 ;######### TRACKING MONITOR CONFIG ############ TrackingMonitor.enable_monitor=true TrackingMonitor.decimation_factor=1 TrackingMonitor.client_addresses=127.0.0.1 TrackingMonitor.udp_port=1232gnss-sdr-0.0.20/conf/RealTime_input/000077500000000000000000000000001477325711200172105ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_GPS_L1_2ch_fmcomms2_realtime.conf000066400000000000000000000067761477325711200271250ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [Sps]. GNSS-SDR.internal_fs_sps=7000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Fmcomms2_Signal_Source SignalSource.item_type=gr_complex SignalSource.device_address=192.168.0.4 SignalSource.sampling_frequency=7000000 SignalSource.freq=1575420000 SignalSource.bandwidth=4000000 SignalSource.RF_channels=2 SignalSource.rx1_enable=true SignalSource.rx2_enable=true SignalSource.gain_mode_rx1=slow_attack SignalSource.gain_mode_rx2=slow_attack SignalSource.rf_port_select=A_BALANCED SignalSource.gain_rx1=64 SignalSource.gain_rx2=64 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.enable_dds_lo=false SignalSource.freq_rf_tx_hz=1260000000 SignalSource.freq_dds_tx_hz=1000 SignalSource.scale_dds_dbfs=0.0 SignalSource.phase_dds_deg=0.0 SignalSource.tx_attenuation_db=0.0 ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner0.implementation=Pass_Through SignalConditioner1.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel0.signal=1C Channel1.RF_channel_ID=0 Channel1.signal=1C Channel2.RF_channel_ID=0 Channel2.signal=1C Channel3.RF_channel_ID=0 Channel3.signal=1C Channel4.RF_channel_ID=1 Channel4.signal=1C Channel5.RF_channel_ID=1 Channel5.signal=1C Channel6.RF_channel_ID=1 Channel6.signal=1C Channel7.RF_channel_ID=1 Channel7.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.threshold=2.5 Acquisition_1C.blocking=true Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.pll_bw_hz=35.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_GPS_L1_LimeSDR.conf000066400000000000000000000107211477325711200242040ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2021 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=5000000 GNSS-SDR.use_acquisition_resampler=true ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Limesdr_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=5000000 SignalSource.freq=1575420000 SignalSource.gain=50 ; 0-73 dB no AGC in LimeSDR ; SignalSource.analog_bw ; if not set, defaults to sample_rate/2 ; SignalSource.digital_bw ; if not set, defaults to 0 (disabled filter) ; SignalSource.limesdr_serial ; if not set, its automatic SignalSource.antenna=2 ; None(0), LNAH(1), LNAL(2), LNAW(3), AUTO(255) SignalSource.ext_clock_MHz=0 ; 0 -> internal clock SignalSource.limechannel_mode=0 ; A(0), B(1) or (A+B) MIMO(2) SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./captured_signal.dat SignalConditioner.implementation=Signal_Conditioner DataTypeAdapter.implementation=Pass_Through InputFilter.implementation=Pulse_Blanking_Filter ; <- Required in some locations InputFilter.pfa=0.001 InputFilter.segments_est=2500 Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=7 Channels_1B.count=0 Channels.in_acquisition=1 Channel.signal=1C ;######### GPS L1 ACQUISITION CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### GALILEO E1 ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 Acquisition_1B.pfa=0.01 Acquisition_1B.blocking=false Acquisition_1B.doppler_max=5000 Acquisition_1B.doppler_step=125 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### GPS L1 TRACKING CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=4.0; Tracking_1C.pll_bw_narrow_hz=5.0; Tracking_1C.dll_bw_narrow_hz=0.75; Tracking_1C.extend_correlation_symbols=1; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.early_late_space_narrow_chips=0.5 ;######### GALILEO E1 TRACKING CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=15.0; Tracking_1B.dll_bw_hz=0.75; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.5; Tracking_1B.pll_bw_narrow_hz=5.0 Tracking_1B.dll_bw_narrow_hz=0.5 Tracking_1B.extend_correlation_symbols=1 Tracking_1B.track_pilot=true Tracking_1B.enable_fll_pull_in=true; ; Tracking_1B.pull_in_time_s=60 Tracking_1B.enable_fll_steady_state=false Tracking_1B.fll_bw_hz=10 Tracking_1B.dump=false Tracking_1B.dump_filename=tracking_ch_ ;######### TELEMETRY DECODER GPS L1 CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER Galileo E1 CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.enable_rx_clock_correction=false PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.rinexobs_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_GPS_L1_USRP_X300_realtime.conf000066400000000000000000000114741477325711200261400ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; Configuration file for using USRP X300 as a RF front-end for GPS L1 signals. ; Set SignalSource.device_address to the IP address of your device ; and run: ; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE SignalSource.item_type=cshort SignalSource.sampling_frequency=4000000 SignalSource.freq=1575420000 SignalSource.gain=40 SignalSource.subdevice=A:0 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=cshort ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Fir_Filter InputFilter.input_item_type=cshort InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=11 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.48 InputFilter.band2_begin=0.52 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=4000000 InputFilter.IF=0 InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.item_type=gr_complex Resampler.sample_freq_in=4000000 Resampler.sample_freq_out=4000000 Resampler.dump=false Resampler.dump_filename=./resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels_1B.count=0 Channels.in_acquisition=1 Channel.signal=1C ;Channel0.signal=1C ;Channel1.signal=1C ;Channel2.signal=1C ;Channel3.signal=1C ;Channel4.signal=1C ;Channel5.signal=1C ;Channel6.signal=1C ;Channel7.signal=1C ;Channel8.signal=1C ;Channel9.signal=1C ;Channel10.signal=1C ;Channel11.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=0.01 ;Acquisition_1C.pfa=0.00001 Acquisition_1C.doppler_max=8000 Acquisition_1C.doppler_step=500 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=30.0; Tracking_1C.dll_bw_hz=4.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_GPS_L1_USRP_realtime.conf000066400000000000000000000072401477325711200254220ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; Configuration file for using USRP 1 as a RF front-end for GPS L1 signals. ; Run: ; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L1_USRP_realtime.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source ;SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE SignalSource.item_type=gr_complex SignalSource.sampling_frequency=2000000 SignalSource.freq=1575420000 SignalSource.gain=60 SignalSource.subdevice=A:0 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=6 Channels_1B.count=0 Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1G" GLONASS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "5X" GALILEO E5a I+Q ;# "L5" GPS L5 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=0.01 ;Acquisition_1C.pfa=0.0001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=30.0; Tracking_1C.dll_bw_hz=4.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation: PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_GPS_L1_bladeRF.conf000066400000000000000000000065111477325711200242460ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=2000000 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Osmosdr_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=2000000 SignalSource.freq=1575420000 ;# RF Gain: LNA Gain {0, 3, 6} SignalSource.gain=6 ;# IF Gain: N/A SignalSource.rf_gain=40 ;# BB Gain: RX VGA1 + VGA2 [5, 60] SignalSource.if_gain=48 SignalSource.AGC_enabled=false SignalSource.samples=0 SignalSource.repeat=false SignalSource.osmosdr_args=bladerf=0 ; This line enables the bladeRF SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.decimation_factor=1 InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.9 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=0.015 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 Acquisition_1C.max_dwells=15 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;PVT.implementation=RTKLIB_PVT PVT.positioning_mode=Single PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.iono_model=Broadcast PVT.trop_model=Saastamoinen PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1077_rate_ms=1000 PVT.rinex_version=2 gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_GPS_L1_fmcomms2_realtime.conf000066400000000000000000000104031477325711200263470ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=2000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Fmcomms2_Signal_Source SignalSource.item_type=gr_complex SignalSource.device_address=10.42.0.196 SignalSource.sampling_frequency=2000000 SignalSource.freq=1575420000 SignalSource.bandwidth=2000000 SignalSource.rx1_enable=true SignalSource.gain_mode_rx1=manual SignalSource.rf_port_select=A_BALANCED SignalSource.gain_rx1=64 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=2000000 InputFilter.IF=0; IF deviation due to front-end LO inaccuracies [Hz] ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=5 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=0.015 ;Acquisition_1C.pfa=0.0001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 Acquisition_1C.max_dwells=15 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_GPS_L1_plutosdr_realtime.conf000066400000000000000000000117241477325711200265070ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [sps]. ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here: https://www.researchgate.net/publication/257137427_Turning_a_Television_into_a_GNSS_Receiver GNSS-SDR.internal_fs_sps=4000000 GNSS-SDR.use_acquisition_resampler=true ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Plutosdr_Signal_Source SignalSource.item_type=gr_complex SignalSource.device_address=192.168.2.1 SignalSource.sampling_frequency=4000000 SignalSource.freq=1575420000 SignalSource.bandwidth=2000000 SignalSource.gain_mode=slow_attack SignalSource.gain=30 SignalSource.samples=0 SignalSource.buffer_size=65000 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./capture.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels_1B.count=0 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.use_CFAR_algorithm=false; Acquisition_1C.threshold=2.6 Acquisition_1C.doppler_max=50000 Acquisition_1C.doppler_step=250 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### GALILEO ACQUISITION CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.threshold=2.5 Acquisition_1B.use_CFAR_algorithm=false Acquisition_1B.blocking=false Acquisition_1B.doppler_max=6000 Acquisition_1B.doppler_step=125 Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.pll_bw_hz=35.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.enable_fll_pull_in=true; Tracking_1C.fll_bw_hz=10 Tracking_1C.pll_bw_narrow_hz=5.0; Tracking_1C.dll_bw_narrow_hz=0.75; Tracking_1C.extend_correlation_symbols=1; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.early_late_space_narrow_chips=0.5 ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=15.0; Tracking_1B.dll_bw_hz=0.75; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.5; Tracking_1B.pll_bw_narrow_hz=5.0 Tracking_1B.dll_bw_narrow_hz=0.5 Tracking_1B.extend_correlation_symbols=1 Tracking_1B.track_pilot=true Tracking_1B.enable_fll_pull_in=true; ;Tracking_1B.pull_in_time_s=60 Tracking_1B.enable_fll_steady_state=false Tracking_1B.fll_bw_hz=10 Tracking_1B.dump=false Tracking_1B.dump_filename=tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.enable_rx_clock_correction=false PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.rinexobs_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf000066400000000000000000000122011477325711200262710ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here: https://www.researchgate.net/publication/257137427_Turning_a_Television_into_a_GNSS_Receiver ; i.e. using front-end-cal as reported here: https://www.researchgate.net/publication/257137427_Turning_a_Television_into_a_GNSS_Receiver GNSS-SDR.internal_fs_sps=1200000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation SignalSource.implementation=RtlTcp_Signal_Source SignalSource.sampling_frequency=1200000 SignalSource.freq=1575420000 SignalSource.gain=40 SignalSource.rf_gain=40 SignalSource.if_gain=30 SignalSource.AGC_enabled = false SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat SignalSource.address=127.0.0.1 SignalSource.port=1234 SignalSource.swap_iq=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here: https://www.researchgate.net/publication/257137427_Turning_a_Television_into_a_GNSS_Receiver InputFilter.sampling_frequency=1200000 InputFilter.IF=80558 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=4 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=0.015 ;Acquisition_1C.pfa=0.0001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_min=-10000 Acquisition_1C.doppler_step=500 Acquisition_1C.max_dwells=15 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation: PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=true PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_GPS_L1_rtlsdr_realtime.conf000066400000000000000000000133251477325711200261440ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here: https://www.researchgate.net/publication/257137427_Turning_a_Television_into_a_GNSS_Receiver GNSS-SDR.internal_fs_sps=1999898 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Osmosdr_Signal_Source SignalSource.item_type=gr_complex ; FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here: https://www.researchgate.net/publication/257137427_Turning_a_Television_into_a_GNSS_Receiver SignalSource.sampling_frequency=2000000 SignalSource.freq=1575420000 SignalSource.gain=40 SignalSource.rf_gain=40 SignalSource.if_gain=30 SignalSource.AGC_enabled = false SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ;# Please note that the new RTL-SDR Blog V3 dongles ship a < 1 PPM ;# temperature compensated oscillator (TCXO), which is well suited for GNSS ;# signal processing, and a 4.5 V powered bias-tee to feed an active antenna. ;# Whether the bias-tee is turned off before reception depends on which version ;# of gr-osmosdr was used when compiling GNSS-SDR. With an old version ;# (for example, v0.1.4-8), the utility rtl_biast may be used to switch the ;# bias-tee, and then call gnss-sdr. ;# See https://github.com/rtlsdrblog/rtl_biast ;# After reception the bias-tee is switched off automatically by the program. ;# With newer versions of gr-osmosdr (>= 0.1.4-13), the bias-tee can be ;# activated by uncommenting the following line: ;SignalSource.osmosdr_args=rtl,bias=1 ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here: https://www.researchgate.net/publication/257137427_Turning_a_Television_into_a_GNSS_Receiver InputFilter.sampling_frequency=1999898 InputFilter.IF=80558 ; IF deviation due to front-end LO inaccuracies [Hz] ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=4 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=0.015 ;Acquisition_1C.pfa=0.0001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_min=-10000 Acquisition_1C.doppler_step=500 Acquisition_1C.max_dwells=15 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_GPS_L2C_USRP1_realtime.conf000066400000000000000000000111371477325711200256070ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; Configuration file for using USRP1 as a RF front-end for GPS L2C signals ; Run: ; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L2C_USRP1_realtime.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=2000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=2000000 SignalSource.freq=1227600000 SignalSource.gain=60 SignalSource.subdevice=A:0 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=20000000 InputFilter.IF=-1600000 InputFilter.decimation_factor=1 InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=./resampler.dat Resampler.item_type=gr_complex Resampler.sample_freq_in=2000000 Resampler.sample_freq_out=2000000 ;######### CHANNELS GLOBAL CONFIG ############ Channels_2S.count=1 Channels.in_acquisition=1 Channel.signal=2S Channel0.signal=2S Channel1.signal=2S Channel2.signal=2S Channel3.signal=2S Channel4.signal=2S Channel5.signal=2S Channel6.signal=2S Channel7.signal=2S ;Channel8.signal=2S ;Channel9.signal=2S ;Channel10.signal=2S ;Channel11.signal=2S ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.item_type=gr_complex Acquisition_2S.pfa=0.013 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=10000 Acquisition_2S.doppler_step=100 Acquisition_2S.max_dwells=1 Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.pll_bw_hz=1.5; Tracking_2S.dll_bw_hz=0.3; Tracking_2S.order=3; Tracking_2S.early_late_space_chips=0.5; Tracking_2S.dump=true Tracking_2S.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder TelemetryDecoder_2S.dump=false ;######### OBSERVABLES CONFIG ############. Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf000066400000000000000000000114131477325711200262350ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; Configuration file for using USRP X300 as a RF front-end for GPS L2C signals ; Set SignalSource.device_address to the IP address of your device ; and run: ; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.device_address=192.168.50.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE SignalSource.item_type=cshort SignalSource.sampling_frequency=4000000 SignalSource.freq=1227600000 ;### Options: internal, external, or MIMO SignalSource.clock_source=internal SignalSource.gain=35 SignalSource.subdevice=A:0 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=cshort ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Fir_Filter InputFilter.input_item_type=cshort InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=11 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.48 InputFilter.band2_begin=0.52 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=4000000 InputFilter.IF=0 InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=./resampler.dat Resampler.item_type=gr_complex Resampler.sample_freq_in=4000000 Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ Channels_2S.count=1 Channels.in_acquisition=1 Channel.signal=2S Channel0.signal=2S Channel1.signal=2S Channel2.signal=2S Channel3.signal=2S Channel4.signal=2S Channel5.signal=2S Channel6.signal=2S Channel7.signal=2S ;Channel8.signal=2S ;Channel9.signal=2S ;Channel10.signal=2S ;Channel11.signal=2S ;######### ACQUISITION GLOBAL CONFIG ############ ;# GPS L2C M Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.item_type=gr_complex Acquisition_2S.pfa=0.015 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_min=-5000 Acquisition_2S.doppler_step=60 Acquisition_2S.max_dwells=1 Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.pll_bw_hz=2.0; Tracking_2S.dll_bw_hz=0.25; Tracking_2S.order=2; Tracking_2S.early_late_space_chips=0.5; Tracking_2S.dump=true Tracking_2S.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder TelemetryDecoder_2S.dump=true ;######### OBSERVABLES CONFIG ############. Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf000066400000000000000000000060131477325711200270450ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; Configuration file for using USRP X300 as a RF front-end for Galileo E1 signals. ; Set SignalSource.device_address to the IP address of your device ; and run: ; gnss-sdr --config_file=/path/to/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 GNSS-SDR.Galileo_banned_prns=14,18 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.item_type=gr_complex SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE SignalSource.sampling_frequency=4000000 SignalSource.freq=1575420000 SignalSource.gain=50 SignalSource.subdevice=A:0 SignalSource.samples=0 SignalSource.dump=false SignalSource.dump_filename=./signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ###### Channels_1B.count=4 Channels.in_acquisition=1 Channel.signal=1B ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.item_type=gr_complex Acquisition_1B.coherent_integration_time_ms=4 ;Acquisition_1B.threshold=1 Acquisition_1B.pfa=0.000008 Acquisition_1B.doppler_max=6000 Acquisition_1B.doppler_step=250 Acquisition_1B.cboc=false Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=20.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; Tracking_1B.dump=false Tracking_1B.dump_filename=./veml_tracking_ch_ ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100; PVT.display_rate_ms=500; PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea PVT.flag_nmea_tty_port=true PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr_multichannel_GPS_Galileo_Beidou_Glonass_L1_USRP_realtime.conf000066400000000000000000000213251477325711200345170ustar00rootroot00000000000000gnss-sdr-0.0.20/conf/RealTime_input; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=8000000 GNSS-SDR.Beidou_banned_prns=56,57,58 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Osmosdr_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=56000000 SignalSource.freq=1584000000 SignalSource.osmosdr_args=uhd,type=b200,num_recv_frames=256 SignalSource.gain=50 SignalSource.antenna=TX/RX SignalSource.if_bw=56000000 SignalSource.AGC_enabled=false SignalSource.samples=0 SignalSource.repeat=false SignalSource.RF_channels=3 SignalSource.enable_throttle_control=false SignalSource.dump=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner SignalConditioner1.implementation=Signal_Conditioner SignalConditioner2.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter2.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter InputFilter0.decimation_factor=7 InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.filter_type=lowpass InputFilter0.bw=7000000 InputFilter0.tw=500000 InputFilter0.IF=-22902000 InputFilter0.sampling_frequency=56000000 InputFilter0.dump=false InputFilter0.dump_filename=./input_filter.dat ;######### INPUT_FILTER CONFIG ############ InputFilter1.implementation=Freq_Xlating_Fir_Filter InputFilter1.decimation_factor=7 InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex InputFilter1.taps_item_type=float InputFilter1.filter_type=lowpass InputFilter1.bw=7000000 InputFilter1.tw=500000 InputFilter1.IF=-8580000 InputFilter1.sampling_frequency=56000000 InputFilter1.dump=false InputFilter1.dump_filename=./input_filter.dat ;######### INPUT_FILTER CONFIG ############ InputFilter2.implementation=Freq_Xlating_Fir_Filter InputFilter2.decimation_factor=7 InputFilter2.input_item_type=gr_complex InputFilter2.output_item_type=gr_complex InputFilter2.taps_item_type=float InputFilter2.filter_type=lowpass InputFilter2.bw=7000000 InputFilter2.tw=500000 InputFilter2.IF=18000000 InputFilter2.sampling_frequency=56000000 InputFilter2.dump=false InputFilter2.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler0.implementation=Pass_Through Resampler1.implementation=Pass_Through Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1B.count=10 Channels_1C.count=10 Channels_B1.count=14 Channels_1G.count=8 Channels_1B.RF_channel_ID=1 Channels_1C.RF_channel_ID=1 Channels_B1.RF_channel_ID=0 Channels_1G.RF_channel_ID=2 Channels.in_acquisition=2 ;######### ACQUISITION BEIDOU CONFIG ############ Acquisition_B1.implementation=BEIDOU_B1I_PCPS_Acquisition Acquisition_B1.item_type=gr_complex Acquisition_B1.coherent_integration_time_ms=2 ;Acquisition_B1.max_dwells=2 ;Acquisition_B1.pfa=0.02 Acquisition_B1.pfa=0.000002 Acquisition_B1.doppler_max=6000 Acquisition_B1.doppler_step=100 Acquisition_B1.dump=false Acquisition_B1.dump_filename=./bds_acq ;Acquisition_B1.blocking=true Acquisition_B1.bit_transition_flag = false; ;######### ACQUISITION GPS CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.015 Acquisition_1C.doppler_max=6000 Acquisition_1C.doppler_step=200 Acquisition_1C.max_dwells=4 ;Acquisition_1C.blocking=true Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### ACQUISITION GALILEO CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.coherent_integration_time_ms=2 ;Acquisition_1B.pfa=0.000008 Acquisition_1B.pfa=0.025 Acquisition_1B.doppler_max=6000 Acquisition_1B.doppler_step=200 Acquisition_1B.max_dwells=4 ;Acquisition_1B.repeat_satellite=true Acquisition_1B.cboc=true ;Acquisition_1B.blocking=true Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### ACQUISITION GLONASS CONFIG ############ Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition Acquisition_1G.item_type=gr_complex Acquisition_1G.coherent_integration_time_ms=1 Acquisition_1G.max_dwells=4 Acquisition_1G.pfa=0.02 Acquisition_1G.doppler_max=6000 Acquisition_1G.doppler_step=100 Acquisition_1G.dump=false Acquisition_1G.dump_filename=./G1_acq ;######### TRACKING BEIDOU CONFIG ############ Tracking_B1.implementation=BEIDOU_B1I_DLL_PLL_Tracking Tracking_B1.item_type=gr_complex Tracking_B1.extend_correlation_symbols=10 Tracking_B1.pll_bw_hz=50.0 Tracking_B1.dll_bw_hz=2.00 Tracking_B1.pll_bw_narrow_hz=15.0 Tracking_B1.dll_bw_narrow_hz=1.50 ;Tracking_B1.cn0_min=20 ;Tracking_B1.fll_bw_hz=20 ;Tracking_B1.enable_fll_pull_in=true ;Tracking_B1.enable_fll_steady_state=false Tracking_B1.dump=false Tracking_B1.dump_filename=./epl_tracking_ch_ ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.extend_correlation_symbols=10 Tracking_1C.early_late_space_chips=0.5 Tracking_1C.early_late_space_narrow_chips=0.15 Tracking_1C.pll_bw_hz=30.0 Tracking_1C.dll_bw_hz=2.0 Tracking_1C.pll_bw_narrow_hz=10.0 Tracking_1C.dll_bw_narrow_hz=1.50 Tracking_1C.fll_bw_hz=10 Tracking_1C.enable_fll_pull_in=true Tracking_1C.enable_fll_steady_state=false Tracking_1C.dump=false Tracking_1C.dump_filename=tracking_ch_ ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.extend_correlation_symbols=4 Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=30.0 Tracking_1B.dll_bw_hz=2.0 Tracking_1B.pll_bw_narrow_hz=20.0 Tracking_1B.dll_bw_narrow_hz=1.50 Tracking_1B.track_pilot=true Tracking_1B.enable_fll_pull_in=true; Tracking_1B.enable_fll_steady_state=false Tracking_1B.fll_bw_hz=20 ;######### TRACKING GLONASS CONFIG ############ Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking Tracking_1G.item_type=gr_complex Tracking_1G.pll_bw_hz=40 Tracking_1G.dll_bw_hz=2.5 Tracking_1G.extend_correlation_ms=1 Tracking_1G.pll_bw_narrow_hz=20 Tracking_1G.dll_bw_narrow_hz=1.5 Tracking_1G.dump=false Tracking_1G.dump_filename=./epl_tracking_ch_ ;######### TELEMETRY DECODER BEIDOU CONFIG ############ TelemetryDecoder_B1.implementation=BEIDOU_B1I_Telemetry_Decoder TelemetryDecoder_B1.dump=false ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GALILEO E1B CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### TELEMETRY DECODER GLONASS CONFIG ############ TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder TelemetryDecoder_1G.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.threshold_reject_GDOP=100 PVT.elevation_mask=3 PVT.raim_fde=1 PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.enable_rx_clock_correction=true PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1077_rate_ms=1000 PVT.rinex_version=2 PVT.flag_nmea_tty_port=true PVT.nmea_dump_devname=/dev/pts/3 ; To use gpsd with GNSS-SDR ; 1. run socat -d -d pty,raw,echo=0 pty,raw,echo=0 ; 2. Set PVT.nmea_dump_devname to first PTY from socat output ; 3. run gpsd -b -n -N /dev/pts/4 ; where /dev/pts/4 is the second PTY from socat output ; 4. run some gpsd client (xgps or other) PVT.enable_monitor=true PVT.monitor_client_addresses=127.0.0.1 PVT.monitor_udp_port=1111 Monitor.enable_monitor=true Monitor.decimation_factor=4 Monitor.client_addresses=127.0.0.1 Monitor.udp_port=1112 ;AcquisitionMonitor.enable_monitor=true AcquisitionMonitor.client_addresses=127.0.0.1 AcquisitionMonitor.udp_port=1112 gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_multichannel_GPS_Galileo_Beidou_L1_hackrf_realtime.conf000066400000000000000000000161161477325711200335570ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_sps=4000000 GNSS-SDR.Beidou_banned_prns=56,57,58 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Osmosdr_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=20000000 SignalSource.freq=1567420000 SignalSource.if_bw=18000000 ;# Next line enables the internal HackRF One bias (3.3 VDC) SignalSource.osmosdr_args=hackrf=0,bias=1,buffers=256 SignalSource.gain=0 SignalSource.rf_gain=40 SignalSource.if_gain=40 SignalSource.AGC_enabled=false SignalSource.samples=0 SignalSource.repeat=false SignalSource.RF_channels=2 SignalSource.enable_throttle_control=false SignalSource.dump=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner0.implementation=Signal_Conditioner SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter1.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter0.implementation=Freq_Xlating_Fir_Filter ;InputFilter0.implementation=Pass_Through InputFilter0.decimation_factor=5 InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex InputFilter0.taps_item_type=float InputFilter0.filter_type=lowpass InputFilter0.bw=3000000 InputFilter0.tw=1000000 InputFilter0.IF=-6322000 InputFilter0.sampling_frequency=20000000 InputFilter0.dump=false InputFilter0.dump_filename=./input_filter.dat ;######### INPUT_FILTER CONFIG ############ InputFilter1.implementation=Freq_Xlating_Fir_Filter ;InputFilter1.implementation=Pass_Through InputFilter1.decimation_factor=5 InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex InputFilter1.taps_item_type=float InputFilter1.filter_type=lowpass InputFilter1.bw=3000000 InputFilter1.tw=1000000 InputFilter1.IF=8000000 InputFilter1.sampling_frequency=20000000 InputFilter1.dump=false InputFilter1.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler0.implementation=Pass_Through Resampler1.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1B.count=10 Channels_1C.count=10 Channels_B1.count=14 Channels_1B.RF_channel_ID=1 Channels_1C.RF_channel_ID=1 Channels_B1.RF_channel_ID=0 Channels.in_acquisition=10 ;######### ACQUISITION BEIDOU CONFIG ############ Acquisition_B1.implementation=BEIDOU_B1I_PCPS_Acquisition Acquisition_B1.item_type=gr_complex Acquisition_B1.coherent_integration_time_ms=2 ;Acquisition_B1.max_dwells=2 ;Acquisition_B1.pfa=0.02 Acquisition_B1.pfa=0.000002 Acquisition_B1.doppler_max=3800 Acquisition_B1.doppler_step=100 Acquisition_B1.dump=false Acquisition_B1.dump_filename=./bds_acq ;Acquisition_B1.blocking=true Acquisition_B1.bit_transition_flag = false; ;######### ACQUISITION GPS CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.pfa=0.015 Acquisition_1C.doppler_max=5000 Acquisition_1C.doppler_step=200 Acquisition_1C.max_dwells=4 ;Acquisition_1C.blocking=true Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### ACQUISITION GALILEO CONFIG ############ Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.coherent_integration_time_ms=2 ;Acquisition_1B.pfa=0.000008 Acquisition_1B.pfa=0.025 Acquisition_1B.doppler_max=5000 Acquisition_1B.doppler_step=200 Acquisition_1B.max_dwells=4 ;Acquisition_1B.repeat_satellite=true Acquisition_1B.cboc=true ;Acquisition_1B.blocking=true Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat ;######### TRACKING BEIDOU CONFIG ############ Tracking_B1.implementation=BEIDOU_B1I_DLL_PLL_Tracking Tracking_B1.item_type=gr_complex Tracking_B1.extend_correlation_symbols=10 Tracking_B1.pll_bw_hz=30.0 Tracking_B1.dll_bw_hz=2.00 Tracking_B1.pll_bw_narrow_hz=15.0 Tracking_B1.dll_bw_narrow_hz=0.50 ;Tracking_B1.cn0_min=20 Tracking_B1.fll_bw_hz=20 Tracking_B1.enable_fll_pull_in=true Tracking_B1.enable_fll_steady_state=false Tracking_B1.dump=false Tracking_B1.dump_filename=./epl_tracking_ch_ ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.extend_correlation_symbols=10 Tracking_1C.early_late_space_chips=0.5 Tracking_1C.early_late_space_narrow_chips=0.15 Tracking_1C.pll_bw_hz=30.0 Tracking_1C.dll_bw_hz=2.0 Tracking_1C.pll_bw_narrow_hz=10.0 Tracking_1C.dll_bw_narrow_hz=0.50 Tracking_1C.fll_bw_hz=10 Tracking_1C.enable_fll_pull_in=true Tracking_1C.enable_fll_steady_state=false Tracking_1C.dump=false Tracking_1C.dump_filename=tracking_ch_ ;######### TRACKING GALILEO CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.extend_correlation_symbols=4 Tracking_1B.item_type=gr_complex Tracking_1B.pll_bw_hz=30.0 Tracking_1B.dll_bw_hz=2.0 Tracking_1B.pll_bw_narrow_hz=20.0 Tracking_1B.dll_bw_narrow_hz=0.50 Tracking_1B.track_pilot=true Tracking_1B.enable_fll_pull_in=true; Tracking_1B.enable_fll_steady_state=false Tracking_1B.fll_bw_hz=20 ;######### TELEMETRY DECODER BEIDOU CONFIG ############ TelemetryDecoder_B1.implementation=BEIDOU_B1I_Telemetry_Decoder TelemetryDecoder_B1.dump=false ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### TELEMETRY DECODER GALILEO E1B CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.threshold_reject_GDOP=100 PVT.elevation_mask=4 PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.enable_rx_clock_correction=true PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_tcp_port=2101 PVT.rtcm_MT1019_rate_ms=5000 PVT.rtcm_MT1077_rate_ms=1000 PVT.rinex_version=2 PVT.flag_nmea_tty_port=true PVT.nmea_dump_devname=/dev/pts/3 PVT.enable_monitor=true PVT.monitor_client_addresses=127.0.0.1 PVT.monitor_udp_port=1111 Monitor.enable_monitor=true Monitor.decimation_factor=4 Monitor.client_addresses=127.0.0.1 Monitor.udp_port=1112 AcquisitionMonitor.enable_monitor=true AcquisitionMonitor.client_addresses=127.0.0.1 AcquisitionMonitor.udp_port=1112 gnss-sdr-0.0.20/conf/RealTime_input/gnss-sdr_multichannel_GPS_L1_USRP_X300_realtime.conf000066400000000000000000000113041477325711200306730ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_1C_enabled=false GNSS-SDR.SUPL_read_1C_assistance_xml=true GNSS-SDR.SUPL_1C_ephemeris_server=supl.google.com GNSS-SDR.SUPL_1C_ephemeris_port=7275 GNSS-SDR.SUPL_1C_acquisition_server=supl.google.com GNSS-SDR.SUPL_1C_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation SignalSource.implementation=UHD_Signal_Source SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE SignalSource.item_type=gr_complex SignalSource.RF_channels=2 SignalSource.sampling_frequency=4000000 SignalSource.subdevice=A:0 B:0 ;######### RF Channels specific settings ###### ;## RF CHANNEL 0 ## SignalSource.freq0=1575420000 SignalSource.gain0=50 SignalSource.samples0=0 ;## RF CHANNEL 1 ## SignalSource.freq1=1575420000 SignalSource.gain1=50 SignalSource.samples1=0 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ SignalConditioner0.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ InputFilter0.implementation=Pass_Through InputFilter0.dump=false InputFilter0.dump_filename=./input_filter.dat InputFilter0.input_item_type=gr_complex InputFilter0.output_item_type=gr_complex ;######### RESAMPLER CONFIG 0 ############ Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ SignalConditioner1.implementation=Pass_Through ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through InputFilter1.dump=false InputFilter1.dump_filename=./input_filter.dat InputFilter1.input_item_type=gr_complex InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ Resampler1.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=4 Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1G" GLONASS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "5X" GALILEO E5a I+Q ;# "L5" GPS L5 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=1 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=1 ;#signal: Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=0.01 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=8000 Acquisition_1C.doppler_step=500 Acquisition_1C.bit_transition_flag=false Acquisition_1C.max_dwells=1 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=4.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/conf/gnss-sdr.conf000066400000000000000000000110611477325711200166750ustar00rootroot00000000000000; This is a GNSS-SDR configuration file ; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/ ; SPDX-License-Identifier: GPL-3.0-or-later ; SPDX-FileCopyrightText: (C) 2010-2020 (see AUTHORS file for a list of contributors) ; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 ;######### SUPL RRLP GPS assistance configuration ##### ; Check https://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNC=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE SignalSource.item_type=ishort SignalSource.sampling_frequency=4000000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Ishort_To_Complex ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Pass_Through ; or Fir_Filter InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.44 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=4000000 InputFilter.IF=0 InputFilter.dump=false InputFilter.dump_filename=./input_filter.dat ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=./resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=6 Channels_1B.count=0 Channels.in_acquisition=1 ;######### SPECIFIC CHANNELS CONFIG ###### ;######### CHANNEL 0 CONFIG ############ ;Channel0.signal=1C ;Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ ;Channel1.signal=1C ;Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler Acquisition_1C.item_type=gr_complex Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.threshold=2.5 ;Acquisition_1C.pfa=0.0001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 Acquisition_1C.max_dwells=5 Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=3.0; Tracking_1C.order=3; Tracking_1C.dump=false Tracking_1C.dump_filename=./epl_tracking_ch_ ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Hybrid_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=RTKLIB_PVT PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad PVT.AR_GPS=PPP-AR ; options: OFF, Continuous, Instantaneous, Fix-and-Hold, PPP-AR PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea PVT.flag_nmea_tty_port=true PVT.nmea_dump_devname=/dev/pts/4 PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 PVT.dump=false PVT.dump_filename=./PVT gnss-sdr-0.0.20/docs/000077500000000000000000000000001477325711200142725ustar00rootroot00000000000000gnss-sdr-0.0.20/docs/CHANGELOG.md000066400000000000000000002700511477325711200161100ustar00rootroot00000000000000 [comment]: # ( SPDX-License-Identifier: GPL-3.0-or-later ) [comment]: # ( SPDX-FileCopyrightText: 2011-2025 Carles Fernandez-Prades ) # Changelog All notable changes to GNSS-SDR will be documented in this file. ## [GNSS-SDR v0.0.20](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.20) - 2025-04-01 ### Improvements in Interoperability: - Improved error handling in UDP connections. - Make it possible to receive multiple constellations using a single channel wideband device (HackRF/LimeSDR/USRP). Demonstration: https://www.youtube.com/watch?v=ZQs2sFchJ6w https://www.youtube.com/watch?v=HnZkKj9a-QM - Add the following signal sources for use when GNSS-SDR is operating on SoC FPGA boards (`-DENABLE_FPGA=ON`): - `ADRV9361_Z7035_Signal_Source_FPGA`: Analog Devices ADRV9361-Z7035 board. - `FMCOMMS5_Signal_Source_FPGA`: FMCOMMS5 analog front-end. - `MAX2771_EVKIT_Signal_Source_FPGA`: MAX2771 evaluation kit analog front-end. - `DMA_Signal_Source_FPGA`: FPGA DMA working in post-processing mode. When building GNSS-SDR for the SoC FPGA, the following options can be passed to CMake with possible values of `ON` or `OFF`, and their default value is `OFF`: - `-DENABLE_AD9361`: Checks if the IIO driver is installed and builds the `ADRV9361_Z7035_Signal_Source_FPGA` and the `FMCOMMS5_Signal_Source_FPGA` sources. - `-DENABLE_MAX2771`: Checks if the SPIdev driver is installed and builds the `MAX2771_EVKIT_Signal_Source_FPGA` source. - `-DENABLE_DMA_PROXY`: Checks if the DMA proxy driver is installed for controlling the DMA in the FPGA and enables its usage. - Add the `ION_GSMS_Signal_Source`, which is able to process raw data files described with the [ION GNSS Software Defined Receiver Metadata Standard](https://sdr.ion.org/). It requires the `-DENABLE_ION=ON` building configuration option. - The `Monitor` and `PVT` blocks are now able to send data to multiple UDP ports. - Add experimental decoding of Galileo's I/NAV ARAIM Integrity Support Message (ISM) as defined in the OS SIS ICD v2.1. Values, if received, are only logged but not used. - Added new [`Cshort_To_Gr_Complex`](https://gnss-sdr.org/docs/sp-blocks/data-type-adapter/#implementation-cshort_to_gr_complex) Data Type Adapter implementation. - The [Osmosdr_Signal_Source](https://gnss-sdr.org/docs/sp-blocks/signal-source/#implementation-osmosdr_signal_source) has gained two new optional configuration parameters: `iq_balance_mode` and `dc_offset_mode`, both of which are set to Automatic by default. - Implemented missing GPS almanac decoding. ### Improvements in Maintainability: - Updated GSL implementation to v0.42.0. See the [gsl-lite release](https://github.com/gsl-lite/gsl-lite/releases/tag/v0.42.0). - Code formatting now based on clang-format 19. ### Improvements in Portability: - Fix building against google-glog 0.7.x. - Find dependencies in the loongarch64 architecture. - Soft transition from [GFlags](https://github.com/gflags/gflags) and [Google Logging (glog)](https://github.com/google/glog) to Abseil [Logging](https://abseil.io/docs/cpp/guides/logging) and [Flags](https://abseil.io/docs/cpp/guides/flags) libraries. While gflags and glog have dutifully served GNSS-SDR for over a decade, they are now showing signs of aging. The latest version of gflags dates back six years now, although the master branch seems to be maintained. Glog remains well maintained, with its latest version v0.7.1 released in June 2024, but with no active development of new features and stuck at C++14. Abseil, on the other hand, represents a contemporary evolution in software development, supports C++17 and C++20, and has absorbed the functionalities of flags and logging from its predecessors. Furthermore, as Abseil has become a prerequisite for the latest versions of Protocol Buffers, its eventual inclusion in GNSS-SDR's indirect dependencies is inevitable. Leveraging Abseil allows for eliminating the need for gflags and glog, thereby reducing the number of mandatory dependencies for GNSS-SDR in forthcoming GNU/Linux distributions. For seamless integration, GNSS-SDR requires a quite recent minimum version of Abseil, v20240116. If an older version is detected, the library will not be utilized, and GNSS-SDR will fall back to using gflags and glog, which still can be used and are fully supported. A new CMake configuration option `-DENABLE_GLOG_AND_GFLAGS=ON` is available to force the usage of glog and gflags instead of Abseil, even if a valid version of that library is present. If the Abseil version installed in your system is too old but you still want to try it, you can also force the downloading and building of a recent version with the new CMake configuration flag `-DENABLE_OWN_ABSEIL=ON` (requires CMake >= 3.24, otherwise it has no effect). This change has a downside in maintainability, since the source code becomes plagued with preprocessor directives required to maintain compatibility both with gflags and glog, and with Abseil. - Historically, GNSS-SDR linked against the GnuTLS library for cryptographic functions. If GnuTLS was not found, then the building system looked for and linked against OpenSSL as a fallback. This was due to the OpenSSL 1.x dual license scheme, which was incompatible with GPL v3.0 license, preventing it from being a mandatory dependency for GNSS-SDR in most GNU/Linux distributions. This issue was solved with the release of OpenSSL 3.0.0, which transitioned to the Apache License 2.0, fully compatible with GPL v3.0. Accordingly, the GNSS-SDR building system now looks for OpenSSL in the first place and, if not found, then it looks for GnuTLS as a fallback. The new CMake configuration option `-DENABLE_GNUTLS=ON` allows linking against GnuTLS instead of OpenSSL. - Allow linking against Boost 1.87.0. - Replace the System V queues by boost::interprocess, improving portability. - Improve detection of Homebrew or Macports in macOS. ### Improvements in Reliability - Implementation of the Galileo Open Service Navigation Message Authentication (OSNMA), a data authentication function for the Galileo Open Service worldwide users, freely accessible to all. OSNMA provides receivers with the assurance that the received Galileo navigation message is coming from the system itself and has not been modified. OSNMA is enabled by default if the receiver configuration defines Galileo E1 OS channels. More details can be found in [Introducing GNSS Navigation Message Authentication](https://gnss-sdr.org/osnma). ### Improvements in Usability: - Tidy up the `conf/` folder. - Add `install` and `uninstall` targets to the `nav_msg_listener` utility. - **Potential Breaking Change**: The source tree has been refactored to follow a more conventional folder structure. This may disrupt user pipelines that relied on the previous structure and could break development branches that were branched off from `next` before this change. The key changes are: - The `tests` and `utils` directories have been moved from the `src` folder to the root of the source tree. - The empty `build` and `data` folders have been removed. Users can create a building folder using `mkdir build` or by having CMake handle it: `cmake -S . -B build`. - All default names for dump or input files starting with `../data/` have been changed to `./`. See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/   ## [GNSS-SDR v0.0.19.1](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.19.1) - 2024-01-26 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10579595.svg)](https://doi.org/10.5281/zenodo.10579595) - Fix formatting of the `CITATION.cff` file. ## [GNSS-SDR v0.0.19](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.19) - 2024-01-23 ### Improvements in Efficiency: - Fixed some performance inefficiencies detected by Coverity Scan. ### Improvements in Interoperability: - Added a new PVT configuration boolean flag (`flag_geohash_log_out`) that enables or disables the Position Geohash tag output in INFO log files. Set to `false` by default. - New fields have been added to the custom output stream defined by `monitor_pvt.proto`: - `utc_time` (a [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) datetime string), - velocity in the local ENU frame (`vel_e`, `vel_n`, and `vel_u`), in m/s, - the course over ground, `cog`, in degrees, - the status of the Galileo's High Accuracy Service, `galhas_status`: - 0: HAS data not available - 1: HAS Corrections applied - `geohash`, an [encoded geographic location](https://en.wikipedia.org/wiki/Geohash). ### Improvements in Maintainability - Removed useless casts and shadowed variables, improving source code readability. ### Improvements in Portability: - Updated local `cpu_features` library to v0.9.0. - `volk_gnsssdr`: fix syntax for Python 3.12 without breaking backward compatibility with Python 2.7. - Fixed linking against GNU Radio v3.10.9.1. - Make use of new API if linking against VOLK >= 3.1. - Fixed undefined behaviour in `volk_gnsssdr` arising from incompatibility between complex numbers in C and C++. - Now build system paths are not leaked when cross-compiling. - Enabled building using macOS Sonoma and `arm64` processor architecture. ### Improvements in Repeatability: - A Kalman filter is now available in the PVT block, smoothing the outputs of a simple Least Squares solution and improving the precision of delivered fixes. It can be enabled by setting `PVT.enable_pvt_kf=true` in the configuration file. The user can set values for the measurement and process noise covariances with the following optional parameters (here with their default values): `PVT.kf_measures_ecef_pos_sd_m=1.0`, in [m]; `PVT.kf_measures_ecef_vel_sd_ms=0.1`, in [m/s]; `PVT.kf_system_ecef_pos_sd_m=2.0`, in [m]; and `PVT.kf_system_ecef_vel_sd_ms=0.5`, in [m/s]. ### Improvements in Scalability: - Fixed some potential data race conditions detected by Coverity Scan. ### Improvements in Usability: - The Galileo E1B Reduced CED parameters usage has been set to `false` by default. You can activate its usage with `Galileo_E1B_Telemetry_Decoder=true` in your configuration file. - The generation of Galileo E6B observables has been disabled if the user sets `PVT.use_e6_for_pvt=false`, fixing the PVT computation in some multi-band configurations. - Fix bug in the custom binary output (`PVT.enable_monitor=true`) output rate. Before this fix, it was outputting data every 20 ms, instead of observing the `PVT.output_rate_ms` setting. - Now the program exits properly if a SIGINT signal is received (_e.g._, the user pressing Ctrl+C, or another user application sending an interruption signal). - The estimated CN0 value is now printed in the terminal when navigation data is successfully decoded. - Fixed GPS navigation message satellite validation. - Latitude and longitude are now reported in the terminal with six decimal places (the sixth decimal place worths up to 0.11 m), instead of the overkilling nine (the ninth decimal place worths up to 110 microns). Similarly, height in meters is now reported with two decimal places instead of three, and velocity in m/s also with two decimal places instead of three. - Fixed the rate at which KML, GPX, GeoJSON, and NMEA annotations are made. The rate is now set by `PVT.output_rate_ms` (`500` ms by default), and can be particularized by `PVT.kml_rate_ms`, `PVT.gpx_rate_ms`, `PVT.geojson_rate_ms`, and `PVT.nmea_rate_ms`. Those values should be multiples of `PVT.output_rate_ms`, or the least common multiple will be taken. See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/   ## [GNSS-SDR v0.0.18](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.18) - 2023-04-06 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7805514.svg)](https://doi.org/10.5281/zenodo.7805514) ### Improvements in Accuracy: - Processing and application of the corrections provided by the Galileo High Accuracy Service (HAS) to the PVT solution. It requires at least a Galileo E1 (or E5a) + Galileo E6B configuration. A new configuration parameter `PVT.use_has_corrections`, set to `true` by default, can be used to deactivate the application of HAS corrections but still retrieve the HAS data if set to `false`. ### Improvements in Availability: - Fixed bug that made the PVT block to not resolve position anymore after a loss of samples event. - Improved non-coherent acquisition when `Acquisition_XX.blocking=false`. - Implemented processing of BeiDou PRN 34 up to PRN 63 signals. - Implemented Hamming code correction for Glonass navigation message. - Now the first iteration of the PVT computation is initialized by the Bancroft method. This allows to get PVT fixes in some unusual geometries (_e.g._, GNSS-like signals transmitted by LEO satellites). This initialization is performed by default. You can opt-out by setting `PVT.bancroft_init=false` in your configuration file. ### Improvements in Interoperability: - Enabled PVT computation in the Galileo E5a + E5b receiver. Observables reported in the RINEX file. - Fixed PVT computation in the Galileo E5b-only receiver. - Get E6B observables and PVT solutions in the Galileo E1B + E6B receiver. Decoding of HAS messages as described in the [HAS SIS ICD v1.0](https://www.gsc-europa.eu/sites/default/files/sites/all/files/Galileo_HAS_SIS_ICD_v1.0.pdf). Generation of RTCM 3.2 messages from the received HAS messages in the [IGS State Space Representation (SSR) Format](https://files.igs.org/pub/data/format/igs_ssr_v1.pdf). Specifically, it generates messages of type IGM01 (SSR Orbit Correction), IGM02 (SSR Clock Correction), IGM03 (SSR Combined Orbit and Clock Correction), and IGM05 (SSR Code Bias). - Added a `ZMQ_Signal_Source` for working with streams of samples published via [ZeroMQ](https://zeromq.org/). - Fixed register unpacking for Labsat3W files in `Labsat_Signal_Source`. This fix is only available if gnss-sdr is linked against Boost >= 1.58.0. ### Improvements in Maintainability: - The now archived [GPSTk toolkit](https://github.com/SGL-UT/GPSTk), used in some optional tests and applications, has been replaced by the new [GNSSTk](https://github.com/SGL-UT/gnsstk) C++ Library. Compatibility with the former GPSTk toolkit is maintained. ### Improvements in Portability: - Improved detection of the BLAS library under macOS / Macports (the `lapack` port dependency installed with the `+openblas` variant does not install `blas` but `openblas`, which is used as a replacement if `blas` is not found). - Removed duplicated files in the Secure User Plane Location implementation, which caused issues when linking with some compilers. - Added support for Xilinx's Zynq UltraScale+ devices (requires the `-DENABLE_FPGA=ON` building option). - Fixed running time error if the `gnss-sdr` binary and/or the GNU Radio libraries were built with the `-D_GLIBCXX_ASSERTIONS` compiler option. This is added by default in some GNU/Linux distributions (e.g., ArchLinux and Fedora). - Fixed linking against libunwind when the glog library is built locally. - The configuration options at building time `-DENABLE_OWN_GLOG`, `-DENABLE_OWN_ARMADILLO`, and `-DENABLE_OWN_GNSSTK` can now be switched `ON` and `OFF` without the need to start from an empty building folder. - Improved CMake handling of the spdlog library used by GNU Radio >= 3.10. - Make use of the C++20 standard if the environment allows for it. - Improved passing of compiler flags to `volk_gnsssdr` if the corresponding environment variables are defined. This fixes warnings in some packaging systems. - Improved support for the RISC-V architecture. - Test files are now downloaded at configuration time instead of being included in the source tree. This allows for a smaller package and fixes Lintian `very-long-line-length-in-source-file` warnings since those files were not recognized as binaries. The configuration flag `-DENABLE_PACKAGING=ON` passed to CMake deactivates file downloading. - The `ENABLE_GENERIC_ARCH` building option was removed, simplifying the process of building the software in non-x86 processor architectures. - If the Protocol Buffers dependency is not found, it is downloaded, built and statically linked at building time. If CMake >= 3.13 and the [Abseil C++ libraries](https://github.com/abseil/abseil-cpp) >= 20230117 are installed on your system, Protocol Buffers v22.2 will be used. If those requirements are not met, Protocol Buffers v21.4 will be used instead (requires autotools). - Since Debian 8 "Jessie", which enjoyed Long Term Support until the end of June 2020, is not anymore in the Debian official repositories, we drop its support. - Fixes for GCC 13 and Clang 16. ### Improvements in Usability: - Fixed large GLONASS velocity errors and the extended correlator when using the `GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking` and `GLONASS_L2_CA_DLL_PLL_C_Aid_Tracking` implementations. - The `UHD_Signal_Source` learned a new parameter `otw_format` for setting the [over-the-wire data format](https://files.ettus.com/manual/page_configuration.html#config_stream_args_otw_format) (that is, the format used between the device and the UHD) in some devices, thus allowing to select the `sc8` format instead of the default `sc16`. This would reduce the dynamic range and increase quantization noise, but also reduce the load on the data link and thus allow more bandwidth. - The `UHD_Signal_Source` learned another two optional parameters: `device_recv_frame_size` and `device_num_recv_frames` for overriding [transport layer defaults](https://files.ettus.com/manual/page_transport.html). - Added gain setting and reading for the XTRX board when using the `Osmosdr_Signal_Source` implementation of a `SignalSource`. - The `Osmosdr_Signal_Source` implementation learned a new parameter `if_bw` to manually set the bandwidth of the bandpass filter on the radio frontend. - The new configuration parameter `Channels_XX.RF_channel_ID` allows to specify the signal source per channel group. - New configuration parameter `PVT.use_unhealthy_sats`, set by default to `false`, allows processing observables of satellites that report an unhealthy status in the navigation message if set to `true`. - Added the [Geohash](https://en.wikipedia.org/wiki/Geohash) of the PVT solution in the internal logs. - Allowed the CMake project to be a sub-project. See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/   ## [GNSS-SDR v0.0.17](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.17) - 2022-04-20 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.6473244.svg)](https://doi.org/10.5281/zenodo.6473244) ### Improvements in Availability: - Compute PVT solutions when using GPS L5 signals even if the satellite is reported as not healthy in the CNAV message. ### Improvements in Portability: - Updated `cpu_features` library to v0.7.0. The building option `ENABLE_OWN_CPUFEATURES` has been replaced by `ENABLE_CPUFEATURES`, defaulting to `ON`. - Fixed building against GNU Radio v3.10.2.0. ### Improvements in Reliability: - Fix some defects detected by Coverity Scan 2021.12.1. ### Improvements in Usability: - Added a script at `src/utils/scripts/download-galileo-almanac.sh` that downloads an XML file with the latest Galileo almanac published by the European GNSS Service Centre at https://www.gsc-europa.eu/gsc-products/almanac See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/   ## [GNSS-SDR v0.0.16](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.16) - 2022-02-15 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.6090349.svg)](https://doi.org/10.5281/zenodo.6090349) ### Improvements in Availability: - Added the Galileo E5b receiving chain. The software is now able to compute PVT solutions as a standalone Galileo E5b receiver. - Improved Time-To-First-Fix when using GPS L1 C/A signals, fixing a bug that was making the receiver to drop the satellite if the PLL got locked at 180 degrees, and making some optimizations on bit transition detection. - Fixed a bug that prevented from obtaining PVT fixes with Galileo E1 OS signals if the I/NAV subframe type 0 was the first decoded subframe. ### Improvements in Interoperability: - Fixed setting of the signal source gain if the AGC is enabled when using the AD9361 front-end. - Fixed the regeneration of Galileo ephemeris from the reduced clock and ephemeris data (CED) defined in the Galileo E1B INAV message introduced in Galileo OS SIS ICD Issue 2.0. - Added a `Limesdr_Signal_Source` for interoperability with LimeSDR (requires [gr-limesdr](https://github.com/myriadrf/gr-limesdr) and the `-DENABLE_LIMESDR=ON` building flag). ### Improvements in Maintainability: - Rewritten Viterbi decoder for Galileo navigation messages. Encapsulated in a class instead of being implemented as free inline functions. This improves memory management and source code readability. - Prefer initialization to assignment in constructors. This improves the readability of the code, could potentially increase performance, and allows for easier detection of unused data members (see the [CppCoreGuidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md/#Rc-initialize)). Added the `cppcoreguidelines-prefer-member-initializer` clang-tidy check to enforce this policy. - Non-functional change: Fixed formatting defects detected by clang-format 13.0. - Non-functional change: Simplified flow graph disconnection. - Updated GSL implementation to v0.40.0. See the [gsl-lite release](https://github.com/gsl-lite/gsl-lite/releases/tag/v0.40.0). - CI - `cpplint` job on GitHub: Added the `build/include_what_you_use` filter for early detection of missing includes. - CI - `clang-tidy` job on GitHub: More robust detection of LLVM paths installed by homebrew. ### Improvements in Portability: - Fixed building against the new API in the gr-iio component present in GNU Radio v3.10.X.Y. - Fixed building against GNU Radio v3.10.X.Y, which does not support the C++20 standard. - Fixed building against GNU Radio v3.10.X.Y, which replaced [log4cpp](https://log4cpp.sourceforge.net/) by the [spdlog](https://github.com/gabime/spdlog) and [fmt](https://github.com/fmtlib/fmt) libraries. - Updated `cpu_features` library for improved processor detection. ### Improvements in Reliability: - Fixed some potential buffer overflows. - Avoid source code lines longer than 512 characters. This was a warning raised by Lintian (very-long-line-length-in-source-file). Long lines in source code could be used to obfuscate the source code and to hide stuff like backdoors or security problems. ### Improvements in Usability: - Added a new monitor to extract the decoded data bits of the navigation messages and send them elsewhere via UDP. Activated by setting `NavDataMonitor.enable_monitor=true`, `NavDataMonitor.client_addresses=127.0.0.1` and `NavDataMonitor.port=1237` in the configuration file. Format described in the `nav_message.proto` file. A simple listener application written in C++ is included in `src/utils/nav-listener` as an example. - Extract successful rate of the CRC check in the decoding of navigation messages. This can be enabled by setting `TelemetryDecoder_XX.dump_crc_stats=true` and, optionally, `TelemetryDecoder_XX.dump_crc_stats_filename=./crc_stats` in the configuration file. At the end of the processing (or exiting with `q` + `[Enter]`), the CRC check success rate will be reported in a file. - The `UHD_Signal_Source` learned to dump data in folders that do not exist, _e.g._, if `SignalSource.dump=true`, `SignalSource.dump_filename=./non-existing/data.dat`, and the `non-existing` folder does not exist, it will be created if the running user has writing permissions. This also works for absolute paths. - Added a new configuration parameter `PVT.rtk_trace_level` that sets the logging verbosity level of the RTKLIB library. - Added a new output parameter `Flag_PLL_180_deg_phase_locked` in the monitor output that indicates if the PLL got locked at 180 degrees, so the symbol sign is reversed. - Fixed a bug in the satellite selection algorithm for configurations with a large number of channels. The maximum number of channels per signal is now limited to the number of available satellites per system minus one. The number of channels performing concurrent acquisition, `Channels.in_acquisition`, cannot be larger than the total number of channels. The program will stop if those requirements are not met in the configuration file. - Fixed program termination when using `File_Signal_Source` and extended integration times. - The `Fifo_Signal_Source` Signal Source implementation learned to handle the `ibyte` type. - Added a `CITATION.cff` file. - Updated version of the Contributor Covenant to version 2.1. See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/   ## [GNSS-SDR v0.0.15](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.15) - 2021-08-23 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5242839.svg)](https://doi.org/10.5281/zenodo.5242839) ### Improvements in Availability: - Added the reading of reduced clock and ephemeris data (CED) in the Galileo E1B INAV message introduced in Galileo OS SIS ICD Issue 2.0. If the reduced CED is available before the full ephemeris set, it is used for PVT computation until the full set has not yet been received. This can contribute to shortening the Time-To-First-Fix. Still experimental. - Added the exploitation of the FEC2 Erasure Correction in the Galileo E1B INAV message introduced in Galileo OS SIS ICD Issue 2.0. This can contribute to shortening the Time-To-First-Fix. Since the added computational cost could break some real-time configurations, this feature is disabled by default. It can be activated from the configuration file by adding `TelemetryDecoder_1B.enable_reed_solomon=true`. - Reduction of the TTFF in GPS L1 and Galileo E1 by improving the frame synchronization mechanism. ### Improvements in Maintainability: - The Contributor License Agreement (CLA) signing for new contributors has been replaced by a [Developer's Certificate of Origin (DCO)](https://github.com/gnss-sdr/gnss-sdr/blob/next/.github/DCO.txt), which implies that contributed commits in a pull request need to be signed as a manifestation that contributors have the right to submit their work under the open source license indicated in the contributed file(s) (instead of asking them to sign the CLA document). - Improved handling of changes in GNU Radio 3.9 FFT API. - Improved handling of the filesystem library. - Added an abstract class `SignalSourceInterface` and a common base class `SignalSourceBase`, which allow removing a lot of duplicated code in Signal Source blocks, and further abstract file-based interfaces behind them. - Do not apply clang-tidy fixes to protobuf-generated headers. - Refactored private implementation of flow graph connection and disconnection for improved source code readability. - Added a base class for GNSS ephemeris, saving some duplicated code and providing a common nomenclature for ephemeris' parameters. New generated XML files make use of the new parameters' names. - Update GSL implementation to 0.38.1. See https://github.com/gsl-lite/gsl-lite/releases/tag/v0.38.1 - Update references to the latest GPS ICDs (IS-GPS-200M, IS-GPS-800H, IS-GPS-705H) published in May, 2021. ### Improvements in Portability: - Avoid collision of the `cpu_features` library when installing the `volk_gnsssdr` library on its own, and VOLK has already installed its version. Added a new building option `ENABLE_OWN_CPUFEATURES`, defaulting to `ON` when building `gnss-sdr` but defaulting to `OFF` when building a stand-alone version of `volk_gnsssdr`. When this building option is set to `ON`, it forces the building of the local version of the `cpu_features` library, regardless of whether it is already installed or not. - CMake's `` version bumped to 3.21. The minimum CMake version is 2.8.12. - Fix building when using the Xcode generator, Xcode >= 12 and CMake >= 3.19. - Fix building of FPGA blocks when linking against GNU Radio >= 3.9 and/or Boost >= 1.74. - Fix linking of the `` library when using GCC 8.x and GNU Radio >= 3.8. - If the Matio library is not found, now it is configured and built by CMake instead of using autotools. - Added support for Apple M1 AArch64 architecture processor and for FreeBSD on x86, improved AMD microarchitecture detection. - CMake now selects the C++23 standard if the environment allows for it. - Improved detection of Gnuplot and `gnss_sim` when cross-compiling. - NEON kernel implementations of the `volk_gnsssdr` library are now enabled in aarch64 architectures. ### Improvements in Reliability - Bug fix in the Galileo E1/E5 telemetry decoder that produced incorrect timing information if a satellite is lost and then readquired. - Check satellites' health status. If a satellite is marked as not healthy in its navigation message, the corresponding observables are not used for navigation. ### Improvements in Usability: - Added a new `Fifo_Signal_Source` implementation that allows using a [Unix FIFO](https://en.wikipedia.org/wiki/Named_pipe) as a signal source, thus allowing to multiplex signal streams outside of `gnss-sdr`, letting another program hold access to the receiver, or allowing signal sources that are not supported by `gnss-sdr` but can dump the signal to a FIFO. - Avoid segmentation faults in the flow graph connection and/or starting due to some common inconsistencies in the configuration file. - Provide hints to the user in case of failed flow graph connection due to inconsistencies in the configuration file. - Fix segmentation fault if the RINEX output was disabled. - Added a feature that optionally enables the remote monitoring of GPS and Galileo ephemeris using UDP and [Protocol Buffers](https://protobuf.dev/). - Now building the software passing the `-DENABLE_FPGA=ON` to CMake does not make the receiver unusable when running on non-FPGA-enabled platforms. On FPGA-enabled platforms, now it is possible to run non-FPGA-enabled configurations. - Fix bug that made the Monitor block to always set to 0 the `carrier_phase_rads` parameter value. - The `Labsat_Signal_Source` implementation of the `SignalSource` block now can read files in the LabSat 3 Wideband format (`.LS3W`). When using this format, this source block can provide multiple RF chain outputs. - Replace `Receiver.sources_count` configuration parameter name by `GNSS-SDR.num_sources`. The former parameter name is still read to ensure backward compatibility with configuration files using that nomenclature. - Fix bug in searching for gr-iio when CMake was re-run several times with different settings for the `-DENABLE_FMCOMMS2` or `-DENABLE_PLUTOSDR` building options. - Fix building when using UHD >= v4.0.0.0. - Fix building for `-DENABLE_FMCOMMS2=ON` and/or `-DENABLE_PLUTOSDR=ON` when the built-in gr-iio module introduced in GNU Radio 3.10 is found. This in-tree GNU Radio module takes precedence over the gr-iio package provided at https://github.com/analogdevicesinc/gr-iio. If the GNU Radio module is found, the other one is ignored. - File `changelog.md` renamed to the more usual `CHANGELOG.md` uppercase name. - New global configuration parameter `GNSS-SDR.observable_interval_ms`, set by default to 20 [ms], allows to control the internal rate at which computed observables sets are processed (50 observables sets per second by default). - Fix bug in the `Monitor.decimation_factor` parameter, which was not working properly for other values than 1. See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/   ## [GNSS-SDR v0.0.14](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.14) - 2021-01-08 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4428100.svg)](https://doi.org/10.5281/zenodo.4428100) ### Improvements in Availability: - Fixed bug in acquisition detection when the configuration parameter `Acquisition_XX.threshold` was set but `Acquisition_XX.pfa` was not, causing false locks. - Fixed anti-jamming filters: `Pulse_Blanking_Filter`, `Notch_Filter`, and `Notch_Filter_Lite`. ### Improvements in Efficiency: - Faster `SignalConditioner` block when its implementation is set to `Pass_Through`. ### Improvements in Interoperability: - Added the Galileo E6 B/C signal structure based on E6-B/C Codes Technical Note, Issue 1, January 2019, including Acquisition and Tracking blocks. The Telemetry Decoder is still empty (only the CRC is checked, based on Galileo High Accuracy Service E6-B Signal-In-Space Message Specification v1.2, April 2020). ### Improvements in Maintainability: - Added a common shared pointer definition `gnss_shared_ptr`, which allows handling the `boost::shared_ptr` to `std::shared_ptr` transition in GNU Radio 3.9 API more nicely. - Support new FFT and firdes blocks' API in GNU Radio 3.9. - Added detection of inconsistent function prototypes in `volk_gnsssdr` library kernels at compile time. - Fixed defects detected by clang-tidy check `bugprone-reserved-identifier`, and added to the checks list. This check corresponds to CERT C Coding Standard rule [DCL37-C](https://wiki.sei.cmu.edu/confluence/display/c/DCL37-C.+Do+not+declare+or+define+a+reserved+identifier) as well as its C++ counterpart, [DCL51-CPP](https://wiki.sei.cmu.edu/confluence/display/cplusplus/DCL51-CPP.+Do+not+declare+or+define+a+reserved+identifier). - Applied and added more clang-tidy checks related to readability: `readability-make-member-function-const` and `readability-qualified-auto`. ### Improvements in Portability: - Fixed `-DENABLE_OWN_GLOG=ON` building option when gflags is installed and it is older than v2.1.2 (_e.g._, in CentOS 7). - Improved handling of old gflags versions, minimum version set to 2.1.2. Replaced `google::` by `gflags::` namespace when using functions of the gflags library. - Replaced `git://` by `https://` as the used protocol when downloading Gflags, so it can work through firewalls requiring authentication. - Fixed static linking of the matio library when downloaded and built by CMake. - Improved CPU feature detection by switching to Google's [cpu_features](https://github.com/google/cpu_features) library: The `volk_gnsssdr` library had its own CPU feature detection methods, which were not totally reliable and difficult to implement across compilers and OSes. This is now handled by the `cpu_features` library, thus building upon that expertise. Since that library has higher dependency version requirements than GNSS-SDR, the old method is still used in old development environments. No extra dependency is needed. This change is transparent to the user, since everything is managed by the CMake scripts. - The `volk_gnsssdr` library can be built on Microsoft Windows and can execute SIMD instructions on that OS. - Removed all instances of `_mm256_zeroupper()` in the `volk_gnsssdr` library, since they are not required and lead to miscompilation with GCC 10.2 and optimization level `-O3`. - Fixed building with `-DENABLE_CUDA=ON` for blocks implemented with CUDA. - Fixed linking against the ORC library if it is present in the system. - Fixed a bug introduced in v0.0.13 that prevented getting Galileo-only PVT fixes in some environments. - Fixed duplication of protobuf build tree if it was locally built and then installed with `DESTDIR` variable set. ### Improvements in Usability: - Fixed a bug when enabling pseudorange carrier smoothing in other bands than L1. - If `SignalConditioner.implementation=Pass_Through`, then all the configuration parameters for the `DataTypeAdapter`, `InputFilter` and `Resampler` blocks are ignored. This was the default behavior in GNSS-SDR v0.0.12, but it changed in v0.0.13. This change recovers the old behavior. - Fixed occasional segmentation fault when exiting with `q` + `[Enter]` keys if `Acquisition_XX.blocking=false`. - Fixed the termination of the receiver with `q` + `[Enter]` keys when using the `Osmosdr_Signal_Source` implementation of the `SignalSource` block. - The `Labsat_Signal_Source` implementation of the `SignalSource` block now can be throttled with the new parameters `SignalSource.enable_throttle_control` and `SignalSource.throttle_frequency_sps`, thus allowing the emulation of real-time operation. - Improved General Block diagram, both in content and in image resolution. - The `Custom_UDP_Signal_Source` implementation now accepts `SignalSource.sample_type=cfloat`, in addition to the existing 4 and 8-bit length sample types. - Fixed the `obsdiff` and `rinex2assist` utilities when installed if they were built with a locally downloaded version of GPSTk. - The generated HTML documentation now makes use of the Doxygen grouping feature. - Improved rendering of equations in HTML documentation generated by Doxygen. Make use of MathJax for equation rendering. Added new building option `ENABLE_EXTERNAL_MATHJAX`, set to `ON` by default. If set to `OFF`, it allows using a local installation of MathJax 2. - Improved dumps in Telemetry Decoding blocks. Now they include the raw navigation message bits. If `TelemetryDecoder_XX.dump=true`, the resulting `.dat` binary file is also delivered in `.mat` format, which is readable from Matlab and Python. See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/   ## [GNSS-SDR v0.0.13](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.13) - 2020-07-29 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3965566.svg)](https://doi.org/10.5281/zenodo.3965566) ### Improvements in Efficiency: - Faster internal handling of `Gnss_Synchro` objects by reducing the amount of copying via adding `noexcept` move constructor and move assignment operators, so the move semantics are also used in STL containers. - All `std::endl` have been replaced by the `'\n'` character, since there is no need to always flush the stream. - Performed a stack reordering of class members that seems to offer statistically better performance in some processor architectures and/or compilers. - Add building option `ENABLE_STRIP` to generate stripped binaries (that is, without debugging symbols), smaller in size and potentially providing better performance than non-stripped counterparts. Only for GCC in Release build mode. Set to `OFF` by default. ### Improvements in Maintainability: - Improved usage of smart pointers to better express ownership of resources. - Add definition of `std::make_unique` for buildings with C++11, and make use of it through the source code. - Private members in headers have been sorted by type and size, minimizing padding space in the stack and making the files more readable for humans. - Simpler, less error-prone design of the `GNSSBlockFactory` class public API and internal implementation. - Simpler API for the `Pvt_Solution` class. - Improved system constant definition headers, numerical values are only written once. - Improved `const` correctness. - The software can now be built against the GNU Radio 3.9 API that uses standard library's smart pointers instead of Boost's. Minimum GNU Radio required version still remains at 3.7.3. - The software can now be built against Boost <= 1.73 (minimum version: 1.53). - Fixed building with GCC 10 (gcc-10 and above flipped a default from `-fcommon` to `-fno-common`, causing an error due to multiple defined lambda functions). - Fixed warnings raised by GCC 10 and Clang 10. - Various improvements in the CMake scripts: better decision on the C++ standard to use; simplifications for various API dependency and environment versions requirements, with more intuitive naming for variables; fixed the `ENABLE_CLANG_TIDY` option; better GFORTRAN module; and broader adoption of the modern per-target approach. ### Improvements in Portability: - The software can now be cross-compiled on Petalinux environments. - Removed python six module as a dependency if using Python 3.x. - Make use of `std::span` if the compiler supports it, and use `gsl-lite` as a fallback. The latter has been updated to version [0.37.0](https://github.com/gsl-lite/gsl-lite/releases/tag/0.37.0). - Improved finding of `libgfortran` in openSUSE and Fedora distributions. - Improved interface for FPGA off-loading. - Allow a random name for the build type. If not recognized, it is set to `None`. This allows packaging in some distributions that pass an arbitrary name as the build type (e.g., Gentoo) to avoid unexpected compiler flags. The building option `ENABLE_PACKAGING` must be set to `ON` when packaging. - Do not stop the receiver if SysV message queues cannot be created. ### Improvements in Reliability: - Fixed a bug in GLONASS GNAV CRC computation. - Fixed a bug in GLONASS time year. - Fixed a possible buffer overflow in the generation of RTCM messages. - Fixed bugs which could cause a random crash on receiver stopping. ### Improvements in Reproducibility: - Improved reproducibility of the `volk_gnsssdr` library: Drop compile-time CPU detection. ### Improvements in Testability: - Add building option `ENABLE_BENCHMARKS`, which activates the building of benchmarks for some code snippets, making it easier to developers to benchmark different implementations for the same purpose. Set to `OFF` by default. ### Improvements in Usability: - Do not pollute the source directory if the software is built from an out-of-source-tree directory. Downloaded external sources and test raw files are now stored in a `./thirdparty` folder under the building directory. In the case of an out-of-source-tree build, the generated binaries are stored in an `./install` folder, also under the building directory. The old behavior for generated binaries is maintained if the building is done from any source tree subfolder (for instance, `gnss-sdr/build`): in that case, binaries are stored in the source tree (under `gnss-sdr/install`). - Defined new `GNSS-SDR.GPS_banned_prns`, `GNSS-SDR.Galileo_banned_prns`, `GNSS-SDR.Glonass_banned_prns` and `GNSS-SDR.Beidou_banned_prns` configuration parameters. The user can specify lists of satellites that will not be processed (e.g., `GNSS-SDR.Galileo_banned_prns=14,18` since Galileo E14 and E18 satellites are not usable for PVT). Satellites on those lists will never be assigned to a processing channel. - Added acquisition and tracking monitors, with configuration examples. - Added a Matlab script to quantize the input signal with a given number of bits per sample. - Fixed the building option `-DENABLE_LOG=OFF`, which strips internal logging from the binary and can help to reduce its size and ultimately to speed up the receiver. In binaries with enabled logging, it still can be disabled by passing the command line flag `--minloglevel=3` to `gnss-sdr`. This can be relevant in embedded devices with scarce storage capabilities. - Fixed a bug in the Signal Sources configuration that made the number of samples parameter ignored when too large (that is, when set larger than 2^31-1). Now the `samples` parameter accepts values up to 2^64-1, that is, 18,446,744,073,709,551,615 samples. - Fixed a bug in the forwarding of NMEA messages to a serial port (configuration of the `PVT.nmea_dump_devname` parameter was ignored). - Updated version of the Contributor Covenant to version 2.0. Added badge in the README.md file. See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/   ## [GNSS-SDR v0.0.12](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.12) - 2020-03-13 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3709089.svg)](https://doi.org/10.5281/zenodo.3709089) ### Improvements in Accuracy: - Improved accuracy of the C/N0 estimator. ### Improvements in Availability: - Fixed computation of acquisition threshold when using the `Acquisition_XX.pfa` configuration parameter, including non-coherent accumulation (`Acquisition_XX.max_dwells` > 1). ### Improvements in Efficiency: - Faster implementation of the Viterbi decoder for Galileo navigation messages. - The `-O3` flag is now passed to GCC in `Release` and `RelWithDebInfo` build types (instead of `-O2`), thus enabling tree vectorization. Disabled if building for Fedora or Gentoo. ### Improvements in Flexibility: - New Tracking parameters allow the configuration of the C/N0 and lock detector smoothers, as well as the activation of the FLL in pull-in and steady-state stages. - Added new Tracking parameter `Tracking_XX.carrier_aiding`, allowing enabling/disabling of carrier aiding to the code tracking loop. - New PVT parameter `PVT.enable_rx_clock_correction` allows to enable or disable the continuous application of the Time solution correction (clock steering) to the computation of Observables. By default is set to `false` (that is, disabled). - New PVT parameter `PVT.max_clock_offset_ms`: if `PVT.enable_rx_clock_correction` is set to `false`, this parameter sets the maximum allowed local clock offset with respect to the Time solution. If the estimated offset exceeds this parameter, a clock correction is applied to the computation of Observables. - Fixed L5 and E5a receiver chains when tracking the data component. - Added new PVT configuration parameter `PVT.rinex_name` to specify a custom name of the generated RINEX files. A commandline flag `--RINEX_name` is also available, and overrides the configuration. ### Improvements in Interoperability: - Fixed PVT solution in receivers processing L1 plus L2C and/or L5 signals. - Fixed the initialization of the carrier phase accumulator. Carrier phase measurements are now usable to compute integer ambiguity resolution. - Added carrier phase observable initialization to match the pseudorange length. - Added RINEX files generation for triple-band configurations (L1 + L2C + L5 and L1 + E1 + L2C + L5 + E5a). - Fixed bugs in the decoding of BeiDou navigation messages. - Fixed bugs in the generation of RTCM messages. - Fixed a bug in feeding Galileo channels' observations to RTKLIB, which was causing wrong date of PVT fixes in Galileo-only receivers and not considering Galileo observations in multi-constellation receivers when using signals after the GPS rollover on April 6, 2019. - Improved management of devices with the AD9361 RF transceiver. - Fixed bugs in FPGA off-loading. ### Improvements in Maintainability: - Rewriting of acquisition and tracking adapters, thus avoiding a lot of code duplication. - New CMake option `-DENABLE_ARMA_NO_DEBUG` defines the macro `ARMA_NO_DEBUG`, which disables all run-time checks, such as bounds checking, in the Armadillo library. This will result in faster code. This option is disabled by default during development, but automatically set to `ON` if the option `ENABLE_PACKAGING` is set to `ON`. - All shadowed variables detected by passing `-Wshadow` to the compiler have been fixed (see https://rules.sonarsource.com/cpp/RSPEC-1117?search=shadow and MISRA C++:2008, 2-10-2 - Identifiers declared in an inner scope shall not hide an identifier declared in an outer scope). - Apply more clang-tidy checks related to readability: `readability-avoid-const-params-in-decls`, `readability-braces-around-statements`, `readability-isolate-declaration`, `readability-redundant-control-flow`, and `readability-uppercase-literal-suffix`. Fixed raised warnings. - Fixed a number of defects detected by `cpplint.py`. Filters applied: `+build/class`, `+build/c++14`, `+build/deprecated`, `+build/explicit_make_pair`, `+build/include_what_you_use`, `+build/printf_format`, `+build/storage_class`, `+readability/constructors`, `+readability/namespace`, `+readability/newline`, `+readability/utf8`, `+runtime/casting`, `+runtime/explicit`, `+runtime/indentation_namespace`, `+runtime/init`, `+runtime/invalid_increment`, `+runtime/member_string_references`, `+runtime/memset`, `+runtime/operator`, `+runtime/printf`, `+runtime/printf_format`, and `+whitespace/blank_line`. - `clang-format` can now be applied to the whole code tree without breaking compilation. - Added more check options to `.clang-tidy` file. - Default Python version is now >= 3.4. Python 2.7 still can be used in systems where Python 3 is not available (e.g., CentOS 7, Debian 8, Ubuntu 10.04). - CMake now passes the `-DCMAKE_BUILD_TYPE` (or configuration in multi-configuration generators like Xcode) to modules built along with `gnss-sdr` (e.g, the `volk_gnsssdr` library and googletest). Build types available: `None`, `Release` (by default), `Debug`, `RelWithDebInfo`, `MinSizeRel`, `Coverage`, `NoOptWithASM`, `O2WithASM`, `O3WithASM`, `ASAN`. - Fix runtime errors when compiling in `Debug` mode on macOS. - Updated links in comments through the source code and in CMake scripts. - Update GSL implementation to 0.36.0. See https://github.com/gsl-lite/gsl-lite/releases/tag/v0.36.0 - Create a CI job on GitHub to ensure that `clang-tidy` has been applied in most of the source code (some optional blocks and tests are left apart). - Create a CI job on GitHub to ensure that `clang-format` has been applied. - Create a CI job on GitHub to ensure that `cpplint` filters have been applied. - Create a CI job on GitHub to ensure compliance with REUSE Specification (see https://reuse.software) - Create a CI job on GitHub using `prettier` (https://prettier.io/) to check markdown files formatting. - Create a CI job on GitHub to check the formatting of CMake scripts using `cmakelint` (see https://github.com/richq/cmake-lint). ### Improvements in Openness: - Make software compliant with REUSE Specification – Version 3.0 (see https://reuse.software/spec/). ### Improvements in Portability: - The CMake scripts now find dependencies in Debian's riscv64 architecture. - Enable AVX2 kernels of the `volk_gnsssdr` library when using the Clang compiler. - Fixed building in some ARM-based devices. Now Clang and ARMClang can be used for native building. - Added toolchain files for building gnss-sdr and the `volk_gnsssdr` library in several ARM processor architectures, including those in Raspberry Pi 3 and 4. - The software can now be built using Xcode (passing `-GXcode` to CMake) without previous manual installation of `volk_gnsssdr`. - The software can now be built using Xcode (passing `-GXcode` to CMake) without gflags, glog, matio, PugiXML, Protocol Buffers or googletest previously installed. - Now the `volk_gnsssdr` library can be built on Microsoft Windows. - Now the `volk_gnsssdr` library makes use of C11 `aligned_alloc` where available. - Improved CMake script for cross-compilation and for the detection of AVX, AVX2 and NEON (v7 and v8) instructions. - Fixed warnings raised by CMake 3.17. - Fixed warnings raised by `cmake --warn-uninitialized ..` - Fixed the receiver's availability in systems in which the Sys V message queue mechanism is not available. ### Improvements in Reliability: - Decoding of navigation messages no longer rely on implementation defined behavior for shifting left a signed integer. - Removed usage of functions with insecure API (e.g., `strcpy`, `sprintf`). - New type alias `volk_gnsssdr::vector` allows both aligned memory allocation and automatic deallocation. - Fixed a memory leak in the generation of Galileo PRN codes. - Added clang-tidy checks `clang-analyzer-security.*`, `clang-analyzer-optin.portability.UnixAPI` clang-tidy checks. Fixed raised warnings. - Fixed `cpplint.py` `runtime/printf` and `runtime/explicit` errors. - All constructors callable with one argument are marked with the keyword explicit. See MISRA C++:2008, 12-1-3 - All constructors that are callable with a single argument of fundamental type shall be declared explicit. ### Improvements in Repeatability: - Added the option to apply carrier smoothing of code pseudoranges with new Observables parameter `Observables.enable_carrier_smoothing`. - Fixed normalization of DLL discriminator in BPSK modulations when the spacing between correlators was not 0.5. ### Improvements in Testability: - Add receiver runtime to `position_test` report. - Improvements in FPGA unit tests. - Add new utility tool `obsdiff` to perform single and double differences computations from observation RINEX files. Requires GPSTk and Armadillo >= 9.800. ### Improvements in Usability: - A new global parameter `GNSS-SDR.pre_2009_file` allows to process raw sample files containing GPS L1 C/A signals dated before July 14, 2009. - Improved DLL-PLL binary dump MATLAB/Octave plot script. Old versions removed. - Simplified RTKLIB error log. - Added a Python 3 plotting script to show relative performance of generic `volk_gnsssdr` kernels wrt. SIMD fastest versions. - Added reporting of velocity in the terminal. - Added reporting of user clock drift estimation, in ppm, in the `Pvt_Monitor` and in internal logging (`Debug` mode). - Updated documentation generated by Doxygen, now the `pdfmanual` target works when using ninja. - CMake now generates an improved summary of required/optional dependency packages found and enabled/disabled features, including the building system and GNSS-SDR, CMake and compiler versions. This info is also stored in a file called `features.log` in the building directory. - Markdown files have been wrapped to 80 characters line length to make it easier to read them from the terminal. See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/   ## [GNSS-SDR v0.0.11](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.11) - 2019-08-04 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3359989.svg)](https://doi.org/10.5281/zenodo.3359989) This release has several improvements in different dimensions, addition of new features and bug fixes: ### Improvements in Accuracy: - Local clock correction based on PVT solution, allowing the delivery of continuous observables. - Fix a bug in broadcast ionospheric parameters usage. ### Improvements in Availability: - Improved mechanism for false lock detection in the Tracking loops. - Fixed bug in Galileo INAV/FNAV message decoding when PLL is locked at 180 degrees, which prevented from correct navigation message decoding in some situations. - Fixed bug that caused a random deadlock in the Observables block, preventing the computation of PVT fixes. - Fixed PVT computation continuity through the TOW rollover. - Improved signal acquisition and tracking mechanisms in high dynamic scenarios. ### Improvements in Efficiency: - Added mechanism for assisted acquisition of signals on a secondary band when the primary has already been acquired. This allows a great reduction of the computational load in multi-frequency configurations. - Tracking loops now perform bit synchronization, simplifying the decoding process in Telemetry blocks and FPGA-offloading. - Improved preamble detection implementation in the decoding of navigation messages (acceleration by x1.6 on average per channel). - Shortened Acquisition to Tracking transition time. - Applied clang-tidy checks and fixes related to performance: `performance-faster-string-find`, `performance-for-range-copy`, `performance-implicit-conversion-in-loop`, `performance-inefficient-algorithm`, `performance-inefficient-string-concatenation`, `performance-inefficient-vector-operation`, `performance-move-const-arg`, `performance-move-constructor-init`, `performance-noexcept-move-constructor`, `performance-type-promotion-in-math-fn`, `performance-unnecessary-copy-initialization`, `performance-unnecessary-value-param`, `readability-string-compare`. ### Improvements in Flexibility: - Rewritten Control Thread and GNSS flow graph for increased control of channels' status and smarter assignation of satellites in multi-band configurations. - New Tracking parameters allow the configuration of PLL and DLL filters order. - Added parameter to enable FLL during pull-in time. - Configurable pull-in time in the Tracking loops. ### Improvements in Interoperability: - Added the BeiDou B1I and B3I receiver chains. - Fix bug in GLONASS dual frequency receiver. - Added a custom UDP/IP output for PVT data streaming. - Improved Monitor block with UDP/IP output for internal receiver's data streaming. - Custom output formats described with `.proto` files, making easier to other applications reading them in a forward and backward-compatible fashion upon future format changes. New dependency: Protocol Buffers >= 3.0.0 - Fixes in RINEX generation: week rollover, annotations are not repeated anymore in navigation files. Parameter `PVT.rinexnav_rate_ms` has been removed, annotations are made as new ephemeris arrive. - Fixes in RTCM messages generation: week rollover. ### Improvements in Maintainability: - The internal communication mechanism based on `gr::msg_queue` has been replaced by a thread-safe, built-in asynchronous message passing system based on GNU Radio's Polymorphic Types. This change is backwards-compatible and prevents from a failure in case of a possible future deprecation or removal of the `gr::msg_queue` API. - Deprecated `boost::asio::io_service` replaced by `boost::asio::io_context` if Boost > 1.65 - CMake turns all policies to ON according to the running version up to version 3.15. - Usage of clang-tidy integrated into CMake scripts. New option `-DENABLE_CLANG_TIDY=ON` executes clang-tidy along with compilation. Requires clang compiler. - Applied clang-tidy checks and fixes related to readability: `readability-container-size-empty`, `readability-identifier-naming`, `readability-inconsistent-declaration-parameter-name`, `readability-named-parameter`, `readability-non-const-parameter`, `readability-string-compare`. - Improved includes selection following suggestions by `include-what-you-use` (see https://include-what-you-use.org/), allowing faster compiles, fewer recompiles and making refactoring easier. - Massive reduction of warnings triggered by clang-tidy checks. - Throughout code cleaning and formatting performed with automated tools in order to reduce future commit noise. ### Improvements in Portability: - Added interfaces for FPGA off-loading in GPS L1 C/A, Galileo E1b/c, GPS L2C, GPS L5 and Galileo E5a receiver chains. - CMake scripts now follow a modern approach (targets and properties) but still work with 2.8.12. - Improvements for macOS users using Homebrew. - The software builds against GNU Radio >= 3.7.3, including 3.8.0. Automatically detected, no user intervention is required. - The `volk_gnsssdr` library can now be built without requiring Boost if the compiler supports C++17 or higher. - The Boost Filesystem library is not anymore a required dependency in cases where it can be replaced by `std::filesystem`. Automatically detected, no user intervention is required. - CMake scripts automatically select among C++11, C++14, C++17, or C++20 standards, the most recent as possible, depending on compiler and dependencies versions. - Drawback in portability: Protocol Buffers >= 3.0.0 is a new required dependency. ### Improvements in Reliability: - Included the Guidelines Support Library. General improvement of memory management, replacement of raw pointers by containers or smart pointers. - Applied clang-tidy checks and fixes related to High Integrity C++: `performance-move-const-arg`, `modernize-use-auto`, `modernize-use-equals-default`, `modernize-use-equals-delete`, `modernize-use-noexcept`, `modernize-use-nullptr`, `cert-dcl21-cpp`, `misc-new-delete-overloads`, `cert-dcl58-cpp`, `cert-err52-cpp`, `cert-err60-cpp`, `hicpp-exception-baseclass`, `hicpp-explicit-conversions`. - Fixed a number of defects detected by Coverity Scan (version June 2019). ### Improvements in Usability: - The receiver now admits FPGA off-loading, allowing for real time operation in embedded systems at high sampling rates and high number of signals and channels per signal in multiple bands. - Fixed program termination (avoiding hangs and segfaults in some platforms/configurations). - The `Labsat_Signal_Source` now terminates the receiver's execution when the end of file(s) is reached. It now accepts LabSat 2 filenames and series of LabSat 3 files. - Added configuration parameters to set the annotation rate in KML, GPX, GeoJSON and NMEA outputs, set by default to 1 s. - New parameter `PVT.show_local_time_zone` displays time in the local time zone. Subject to the proper system configuration of the machine running the software receiver. This feature is not available in old compilers. - CMake now generates a summary of required/optional dependency packages found and enabled/disabled features. This info is also stored in a file called features.log in the building directory. - Improved information provided to the user in case of building configuration and runtime failures. - Remove abandoned building option `-DENABLE_GN3S` and `Gn3s_Signal_Source` implementation. See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/   ## [GNSS-SDR v0.0.10](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.10) - 2018-12-14 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2279988.svg)](https://doi.org/10.5281/zenodo.2279988) This release has several improvements in different dimensions, addition of new features and bug fixes: ### Improvements in Accuracy: - Part of the RTKLIB core library has been integrated into GNSS-SDR. There is now a single PVT block implementation which makes use of RTKLIB to deliver PVT solutions, including Single and PPP navigation modes. - Fixed CN0 estimation for other correlation times than 1 ms. - Improved computation of tracking parameters and GNSS observables. - Other minor bug fixes. ### Improvements in Availability: - Internal Finite State Machines rewritten for improved continuity in delivering position fixes. This fixes a bug that was stalling the receiver after about six hours of continuous operation. - Redesign of the time counter for enhanced continuity. - Improved flow graph in multi-system configurations: the receiver does not get stalled anymore if no signal is found from the first system. - Improved acquisition and tracking sensitivity. - Added mechanisms for Assisted GNSS, thus shortening the Time-To-First-Fix. Provision of data via XML files or via SUPL v1.0. Documented at https://gnss-sdr.org/docs/sp-blocks/global-parameters/ - Other minor bug fixes. ### Improvements in Efficiency: - Added the possibility of non-blocking acquisition, which works well when using real-time data from an RF front-end. - Improved flow graph in multi-band configurations: satellites acquired in one band are immediately searched in others. - Complex local codes have been replaced by real codes, alleviating the computational burden. - New `volk_gnsssdr` kernels: `volk_gnsssdr_16i_xn_resampler_16i_xn.h`, `volk_gnsssdr_16ic_16i_rotator_dot_prod_16ic_xn.h`, `volk_gnsssdr_32f_xn_resampler_32f_xn.h`, and `volk_gnsssdr_32fc_32f_rotator_dot_prod_32fc_xn.h`. - Some AVX2 implementations added to the `volk_gnsssdr` library. - Improvement in C++ usage: Use of const container calls when result is immediately converted to a const iterator. Using these members removes an implicit conversion from iterator to const_iterator. - Output printers can be shut down, with some savings in memory and storage requirements. - A number of code optimizations here and there. ### Improvements in Flexibility: - A number of new parameters have been exposed to the configuration system. - Possibility to choose Pilot or Data component for tracking of GPS L5 and Galileo E5a signals. - Enabled extended coherent integration times for signal tracking. - Configurable coherent and/or non-coherent signal acquisition. - Some configuration parameters can now be overridden by commandline flags for easier use in scripts. ### Improvements in Interoperability: - Added the GPS L5 receiver chain. - Added the GLONASS L1 SP receiver chain. - Added the GLONASS L2 SP receiver chain. - Improvements in the Galileo E5a and GPS L2C receiver chains. - Updated list of available GNSS satellites. - Added five more signal sources: `Fmcomms2_Signal_Source` (requires gr-iio), `Plutosdr_Signal Source` (requires gr-iio), `Spir_GSS6450_File_Signal_Source`, `Labsat_Signal_Source` and `Custom_UDP_Signal_Source` (requires libpcap). Documented in https://gnss-sdr.org/docs/sp-blocks/signal-source/ - Improved support for BladeRF, HackRF and RTL-SDR front-ends. - Added tools for the interaction with front-ends based on the AD9361 chipset. - Intermediate results are now saved in MAT-file format (`.mat`), readable from Matlab/Octave and from Python via h5py. - Added the GPX output format. - Improvements in the generation of KML files. - Improvements in the NMEA output. The receiver can produce GPGGA, GPRMC, GPGSA, GPGSV, GAGSA and GAGSV sentences. - Improvements in the RTCM server stability. - Improvements in the correctness of generated RINEX files. - The receiver can read and make use of Galileo almanac XML files published by the European GNSS Service Centre at https://www.gsc-europa.eu/gsc-products/almanac - Own-defined XML schemas for navigation data published at https://github.com/gnss-sdr/gnss-sdr/tree/next/docs/xml-schemas - Added program `rinex2assist` to convert RINEX navigation files into XML files usable for Assisted GNSS. Only available building from source. See https://github.com/gnss-sdr/gnss-sdr/tree/next/src/utils/rinex2assist ### Improvements in Maintainability: - Setup of a Continuous Integration system that checks building and runs QA code in a wide range of GNU/Linux distributions (Arch Linux, CentOS, Debian, Fedora, OpenSUSE, Ubuntu) and releases. See https://gitlab.com/gnss-sdr/gnss-sdr - Creation of multi-system processing blocks, drastically reducing code duplication and maintainability time. - Automated code formatting with clang-format. This tool is widely available and easy to integrate into many code editors, and it also can be used from the command line. It cuts time spent on adhering to the project's code formatting style. - Improvement in C++ usage: C-style casts have been replaced by C++ casts. C-style casts are difficult to search for. C++ casts provide compile time checking ability and express programmers' intent better, so they are safer and clearer. - Improvement in C++ usage: The override special identifier is now used when overriding a virtual function. This helps the compiler to check for type changes in the base class, making the detection of errors easier. - Improvement in C++ usage: A number of unused includes have been removed. Order of includes set to: local (in-source) headers, then library headers, then system headers. This helps to detect missing includes. - Improvement in C++ usage: Enhanced const correctness. Misuses of those variables are detected by the compiler. - Improved code with clang-tidy and generation of a `compile_commands.json` file containing the exact compiler calls for all translation units of the project in machine-readable form if clang-tidy is detected. - Applied some style rules to CMake scripts. - Minimal versions of dependencies identified and detected. ### Improvements in Portability: - Several CMake scripts improvements, more verbose outputs in case of errors. Building configuration has been documented in https://gnss-sdr.org/docs/tutorials/configuration-options-building-time/ - Improved SDK for cross-compilation in embedded devices. Documented in https://gnss-sdr.org/docs/tutorials/cross-compiling/ - Improved control over minimum required versions for core dependencies. - The software builds with C++11, C++14 and C++17 standards. - The software can now be built using GCC >= 4.7.2 or LLVM/Clang >= 3.4.0 compilers on GNU/Linux, and with Clang/AppleClang on macOS. - The Ninja build system can be used in replacement of make. - The `volk_gnsssdr` library can be built using Python 2.7+ or Python 3.6+. - The `volk_gnsssdr` library is now ready for AArch64 NEON instructions. - Improved detection of required and optional dependencies in many GNU/Linux distributions and processor architectures. - Improvement in C++ usage: The `` library has been replaced by the more modern and portable `` (except for the interaction with RTKLIB). - Improvement in C++ usage: The `` library has been replaced by the more modern and portable `` for file handling. - Improvement in C++ usage: C++ libraries preferred over C libraries (e.g., `` instead of ``, `` instead of ``). - Fix compatibility with Boost 1.67 (closes Debian bug #911882 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=911882) - Fixes required by Debian packaging. - Fixes required by Macports packaging. - A downside in portability: BLAS and LAPACK libraries are now required even in ARM devices. - A downside in portability: the matio library >= 1.5.3 is a new required dependency. If not found, it is downloaded and built automatically at building time, but this requires libtool, automake and hdf5 already installed in the system. - A downside in portability: the PugiXML library is a new required dependency. If not found, it is downloaded and built automatically at building time. ### Improvements in Reliability: - Introduced 3 new Input Filter implementations for pulsed and narrowband interference mitigation: `Pulse_Blanking_Filter`, `Notch_Filter` and `Notch_Filter_Lite`. Documented in https://gnss-sdr.org/docs/sp-blocks/input-filter/ - Improved flow graph stability. - Introduction of high-integrity C++ practices into the source code and included in the coding style guide. See https://gnss-sdr.org/coding-style/ - Fixed a number of defects detected by Coverity Scan. - Improvement of QA code and addition of a number of new tests. Documented at https://gnss-sdr.org/docs/tutorials/testing-software-receiver-2/ - Improvement in C++ usage: `rand()` function replaced by `` library. - Improvement in C++ usage: `strlen` and `strncpy` have been replaced by safer C++ counterparts. - Improvement in C++ usage: Some destructors have been fixed, avoiding segmentation faults when exiting the program. - Website switched from http to https. Links in the source tree switched when available. ### Improvements in Reproducibility: - Setup of a Continuous Reproducibility system at GitLab for the automatic reproduction of experiments. The concept was introduced in https://ieeexplore.ieee.org/document/8331069/ Example added in the `src/utils/reproducibility/ieee-access18/` folder. - Fixes of Lintian warnings related to build reproducibility. ### Improvements in Scalability: - Improvements in multi-system, multi-band receiver configurations. The receiver now accepts any number of channels and systems in the three available bands. - All possible combinations of signals and integration times are now accepted by the Observables block. ### Improvements in Testability: - Several Unit Tests added. Documentation of testing concepts and available tests at https://gnss-sdr.org/docs/tutorials/testing-software-receiver/ - New extra unit test `AcquisitionPerformanceTest` checks the performance of Acquisition blocks. - New extra unit test `TrackingPullInTest` checks acquisition to tracking transition. - New extra unit test `HybridObservablesTest` checks the generation of observables. - Improved system testing: position_test accepts a wide list of parameters and can be used with external files. - Receiver channels can now be fixed to a given satellite. - Testing integrated in a Continuous Reproducibility system (see above). - Improved CTest support in `volk_gnsssdr`. ### Improvements in Usability: - All Observables block implementations have been merged into a single implementation for all kinds of GNSS signals, making it easier to configure. - All PVT block implementations have been merged into a single implementation for all kinds of GNSS signals, making it easier to configure. - Misleading parameter name `GNSS-SDR.internal_fs_hz` has been replaced by `GNSS-SDR.internal_fs_sps`. The old parameter name is still read. If found, a warning is provided to the user. The old name will be removed in future releases. - Updated and improved online documentation of processing blocks at https://gnss-sdr.org/docs/sp-blocks/ - Improved documentation of required dependency packages in several GNU/Linux distributions. - Dump and output files can now be stored anywhere. - Parameter names with the same role have been harmonized within different block implementations. - Added a changelog, a code of conduct, a contributing guide and a pull-request template in the source tree. - Added colors to the commandline user interface. - Updated manfiles. - Updated examples of configuration files under the `conf/` folder. See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/   ## [GNSS-SDR v0.0.9](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.9) - 2017-02-13 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.291371.svg)](https://doi.org/10.5281/zenodo.291371) This release has several improvements, addition of new features and bug fixes in many dimensions: ### Improvements in Accuracy: - Major rewriting in the generation of pseudoranges. - Fixed bug in Galileo E5a/I codes. - Fixed bug in Galileo E1 correlator spacing. - Fixed bug that was causing errors in receivers above the troposphere. - Fixed 16-bit complex resampler. - Improved time tracking algorithm. - Added Bancroft's algorithm implementation for PVT initialization. ### Improvements in Availability: - Improved numerical stability of the PVT solution. The infamous bug that was causing apparently random error peaks has finally been fixed. ### Improvements in Efficiency: - VOLK_GNSSSDR: Added NEON,AVX and unaligned protokernels for `volk_gnsssdr_32f_index_max_32` kernel. - VOLK_GNSSSDR: Added `volk_gnsssdr-config-info` to the list of generated executables. ### Improvements in Flexibility: - Added maximum number of dwells in the Tong algorithm. ### Improvements in Interoperability: - Added six new Galileo satellites: FM7, FM10, FM11, FM12, FM13, FM14. - The Hybrid_Observables and Hybrid_PVT implementations can now handle more types of GNSS signals. - The RINEX printer can now print L2C and E5a observables and navigation files, including multiband configurations. - Added RTCM 3.2 output to more receiver configurations. ### Improvements in Maintainability: - The VOLK_GNSSSDR library can now be built with Python 3. Switched dependencies for VOLK_GNSSDR: from (old, python2.7-only) python-cheetah templates to Python3 friendly python-mako and python-six. So, Python-cheetah dependency has been dropped, and python-mako and python-six have been added. - If suitable versions of gflags, glog, armadillo or googletest are not found in the system, they will be downloaded and built at compile time (versions 2.2.0, 0.3.4, 7.600.2 and 1.8.0, respectively). - Fixed more than 30 defects detected by Coverity Scan. - Added CMake Python finder and module checker. - Deleted files related to CPack. - Fixes, updates and improvements in the documentation. - Improvements in CMake scripts: General code cleaning and addition of comments. Improved user information in case of failure. Improved detection of dependencies in more processor architectures (e.g. aarch64). ### Improvements in Marketability: - Reduced time from a commit to deployment (see virtualization mechanisms in Portability). ### Improvements in Portability: - Now GNSS-SDR can be run in virtual environments through snap packages (see https://github.com/carlesfernandez/snapcraft-sandbox) and docker images (see https://github.com/carlesfernandez/docker-gnsssdr). - Now GNSS-SDR is adapted to cross-compiling environments for embedded devices (see https://github.com/carlesfernandez/oe-gnss-sdr-manifest). - BLAS and LAPACK libraries are no longer mandatory on ARM devices. ### Improvements in Scalability: - Fixed bug in acquisition with rata rates higher than 16 Msps in 4ms code periods. ### Improvements in Testability: - Major QA source code refactoring: they has been split into `src/tests/unit-tests` and `src/tests/system-tests` folders. They are optionally built with the `ENABLE_UNIT_TESTING=ON` (unit testing QA code), `ENABLE_UNIT_TESTING_EXTRA=ON` (unit tests that require extra files downloaded at configure time), `ENABLE_SYSTEM_TESTING=ON` (system tests, such as measurement of Time-To-First-Fix) and `ENABLE_SYSTEM_TESTING_EXTRA=ON` (extra system test requiring external tools, automatically downloaded and built at building time) configuration flags. The EXTRA options also download and build a custom software-defined signal generator and version 2.9 of GPSTk, if not already found on the system. Download and local link of version 2.9 can be forced by `ENABLE_OWN_GPSTK=ON` building configuration flag. Only `ENABLE_UNIT_TESTING` is set to ON by default. - Unit tests added: `CPU_multicorrelator_test` and `GPU_multicorrelator_test` measure computer performance in multicorrelator setups. - Unit tests added: `GpsL1CADllPllTracking` and `GpsL1CATelemetryDecoderTest`. - System test added: `ttff_gps_l1` performs a set of cold / assisted runs of the software receiver and computes statistics about the obtained Time To First Fix. - System test added: `obs_gps_l1_system_test` uses an external software-defined signal generator to produce raw digital GNSS signal from a RINEX navigation file and a position (static or dynamic), processes it with GNSS-SDR, and then compares the RINEX observation file produced by the software receiver to that produced by the signal generator. - Software Development Kit provided for embedded devices (see https://gnss-sdr.org/docs/tutorials/cross-compiling/). ### Improvements in Usability: - Now the block factory automatically detects Channel input data type, so it is no longer required to specify Channel.input_type in the configuration. An error raises if Acquisition and Tracking Blocks are not configured with the same input data type. - Block names changed from L2_M to L2C. - Documentation available at https://gnss-sdr.org/docs/ - Improved tools for compilation, execution and testing in embedded devices. See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/   ## [GNSS-SDR v0.0.8](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.8) - 2016-07-04 [![DOI](https://zenodo.org/badge/doi/10.5281/zenodo.57022.svg)](http://dx.doi.org/10.5281/zenodo.57022) This is a maintenance and bug fix release with no relevant new features with respect to v0.0.7. The main changes are: - Fixed a bug that broke building when using latest VOLK release - Updated PYBOMBS instructions - Added Tests for FFT length - Added Tests for CUDA-based tracking - Added Tests for SIMD-based tracking - Improved CUDA-based correlation. - Updated documentation - Fixed building in mips and powerpc architectures. - `gr-gn3s` and `gr-dbfcttc` moved to its own repository. - Improved package reproducibility - VOLK_GNSSSDR: Fixed a bug in AVX2 puppet - VOLK_GNSSSDR: can now be built using the C98 standard - VOLK_GNSSSDR: Fixed a bug that broke building when linking to Boost in some configurations. - VOLK_GNSSSDR: Added an option to trigger profiling at building time. - VOLK_GNSSSDR: Fix the CMake-based check for posix_memalign.   ## [GNSS-SDR v0.0.7](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.7) - 2016-05-15 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.51521.svg)](https://doi.org/10.5281/zenodo.51521) This release has several improvements, addition of new features and bug fixes: - Improvements in receiver design: Internal block communication has been redesigned to accommodate the addition of new signals, and now upstream and downstream communication within blocks is implemented through the GNU Radio block’s asynchronous message passing system, leading to a more scalable, more robust and cleaner design. - Improvements in receiver design: Correlators have been rewritten to take full advantage of VOLK and VOLK_GNSSSDR, and they are of general use for any tracking block. Their API now admit an arbitrary number of correlators, spaced in an arbitrary manner, in 16ic and 32fc versions. - Improvements in receiver design: Block adapters are now all managed by smart pointers, ensuring better memory management. - Improvements in processing speed: The VOLK_GNSSSDR library has been rewritten, following current VOLK standards and adding a number of new kernels. This approach addresses both efficiency and portability. Now the library provides the key kernels for GNSS signal processing in 16ic and 32fc versions, including SSE2, SSE3, SSE4.1, AVX, AV2 and NEON implementations. Please execute `volk_gnsssdr_profile` and `volk_profile` to use the fastest implementation for your host machine. - New source block: `Two_Bit_Packed_File_Signal_Source`. This block takes 2 bit samples that have been packed into bytes or shorts as input and generates a byte for each sample. - Fixes in SUPL assistance (supl.nokia.com removed). - Improvements in acquisition: Added a non CFAR PCPS acquisition algorithm based on the estimation of the post correlation noise floor. If enabled as an option in the acquisition configuration, it allows setting more stable thresholds in the presence of non-gaussian front-end noise (which is the usual behavior of front-ends.) - Fixes in acquisition: Fixed mismatch between the config files and the acquisition code in the specification of the IF. Fixed a bug in the length of the FFT of local codes. - Improvements in tracking sensitivity: Added configuration option to customize the extension of the GPS L1 CA correlation length after bit synchronization (options are: [1,2,4,5,10,20] ms). Only available in the `GPS_L1_CA_DLL_PLL_C_Aid_Tracking` implementation. - New tracking block introduced: `GPS_L1_CA_DLL_PLL_C_Aid_Tracking` is a GPS L1 C/A carrier PLL and code DLL with optional carrier-aid feedback. It is available in both 32 bits `gr_complex` input samples and in 16 bits short int complex samples. The `gr_complex` version has also the capability to extend the coherent correlation period from 1 ms to 20 ms using telemetry symbol synchronization. - Increased resolution in CN0 estimator internal variables. - Fixed a bug in computation of GPS L1 C/A carrier phase observable. - Fixed a bug in the internal state machine that was blocking the receiver after a few hours of usage. Now the receiver can work continually (tested for more than one week, no known limit). - New tracking block introduced: `GPS_L1_CA_DLL_PLL_Tracking_GPU` is a GPS L1 C/A carrier PLL and code DLL that uses the CUDA-compatible GPU to compute carrier wipe off and correlation operations, alleviating the CPU load. - Obsolete/buggy blocks removed: `GPS_L1_CA_DLL_FLL_PLL_Tracking`, `GPS_L1_CA_DLL_PLL_Optim_Tracking`. - Added a RTCM printer and TCP server in PVT blocks (still experimental). The receiver is now able to stream data in real time, serving RTCM 3.2 messages to multiple clients. For instance, it can act as a Ntrip Source feeding a Ntrip Server, or to be used as data input in RTKLIB, obtaining Precise Point Positioning fixes in real-time. The TCP port, Station ID, and rate of MT1019/MT1045 and MSM can be configured. `GPS_L1_CA_PVT` serves MT1019 (GPS Ephemeris) and MSM7 (MT1077, full GPS pseudoranges, phase ranges, phase range rates and CNR - high resolution) messages, while `GALILEO_E1_PVT` serves MT1045 (Galileo ephemeris) and MSM7 (MT1097, full Galileo pseudoranges, phase ranges, phase range rates and CNR - high resolution). - Added a GeoJSON printer. Basic (least-squares) position fixes can be now also stored in this format, in addition to KML. - Obsolete block removed: output filter. - QA code migrated to the new asynchronous message passing system. - Improvements in documentation: update of `README.md` file, addition of documentation for the VOLK_GNSSSDR library, updated links to new ICDs. - Improvements in documentation: Satellite identification updated to current constellation status. - Updated and cleaner console output. Now Galileo satellites have the ‘E’ identifier in their PRN number. - Several improvements in CMake scripts allow to build GNSS-SDR in Linux Debian (Jessie, Stretch and Sid), Ubuntu (from 12.04 to 16.04), including amd64, i386, armhf and arm64 architectures, and possibly in other GNU/Linux distributions, as well as in Mac OS X 10.9 to 10.11. It also works well with CMake 3.5 (some problems solved with VOLK_GNSSSDR as a sub-project). - The software can link either against OpenSSL or against GnuTLS with openssl extensions, whatever it is available. This allows buildings in distributions such as Fedora or ArchLinux, while being compatible with binary distribution through Debian packages. - Fixed a number of defects detected by Coverity Scan. - Some fixes required by Debian licensing and packaging system. - Added a CGRAN (https://www.cgran.org/) manifest - Lots of code cleaning and fixes of typos and small bugs.   ## [GNSS-SDR v0.0.6](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.6) - 2015-09-02 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.30104.svg)](https://doi.org/10.5281/zenodo.30104) This release has several improvements and bug fixes: - Added initial support to multi-band, multi-source configurations (multiple signal sources and signal conditioners). - Updated configuration files to new notation. Old and new configuration notations still compatible. - Added skeleton for mixed (multi-frequency and multi-system) observables block. - Faster local carrier update (25% of improvement). - Added initial support to GPS L2C real time tracking and decoding of CNAV message with NSL STEREO v2, Fraunhofer’s Flexiband, and USRPx front-ends (the latter requiring external clock). - Added initial support to select the frontend clock reference source in UHD signal source (i.e. internal or external clock reference). - Added 2 bits complex file source for GNSS-SDR GSoC 2015 signal sampler designed by Ajith Peter. - Added a new rtl_tcp signal source, remote access to RTL2832U-based dongles via TCP. - Always build front-end-cal, a calibration tool for some DVB-T receivers based on the Realtek's RTL2832U chipset. - Fixed bug in UTC time computation for GPS signals. - Updated satellite identification for GPS and Galileo. - Defined `cbyte` as a new input data type (`std::complex`). - Adding a new data_type_adapter, from interleaved short to `std::complex`. - Adding a filter for complex short streams. - Adding a fir_filter for `std::complex` (aka `cbyte`). It converts the data type to floats, filters, and converts back to cbyte. - Added a resampler for `cbyte`s and `cshort`s. - First working version of a GPS tracking block implementation using CUDA with multi-GPU device support. - Updating RINEX obs header when leap second is available. - Updating RINEX nav file when IONO and UTC data are available. - Include Signal Strength Indicator in RINEX observable files. - Tests fixed. - Fixed more than 200 code defects detected by Coverity Scan. - Updated documentation. - Updated documentation and CMake scripts for the GN3S v2 driver (Linux-only) - Armadillo version automatically downloaded and built if it is not present in the system is now 5.400.3. - Updated old links from googlecode to new links at GitHub for Google Test, gflags, glog and gperftools. - gfortran is no longer a required package, but it is used if available. - Added an option to remove logging. - Enabled cross-compilation for ARM devices. - Lots of code cleaning.   ## [GNSS-SDR v0.0.5](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.5) - 2015-01-13 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.13920.svg)](https://doi.org/10.5281/zenodo.13920) This release has several improvements and bug fixes: - Now GNSS-SDR can be installed on the system with the usual `cmake ../ && make && sudo make install`. - Added `volk_gnsssdr` library, a volk-like library implementing some specific kernels and ensuring portable executables. It comes with a `volk_gnsssdr_profile` executable, in the fashion of `volk_profile`. Volk and `volk_gnsssdr` are compatible and can be mixed together. This is expected to enable faster execution of the software receiver in upcoming versions. - The former `rtlsdr_signal_source` has been replaced by a more general `osmosdr_signal_source` compatible with all those front-ends accessible by the OsmoSDR driver (bladeRF, hackRF, etc.) in addition to RTL-based dongles. - Added manpages when binaries `gnss-sdr`, `volk_gnsssdr_profile` and `front-end-cal` are installed. - Now GNSS-SDR can be built on i386, amd64, armhf, armel and arm64 architectures. - Now GNSS-SDR builds on Ubuntu 14.04 and 14.10, Debian jessie/sid and Mac OS X 10.9 and 10.10. - Improved detection of dependencies, specially when installed as .deb packages. - Added a `check` target with some minimal tests. - Added support for interleaved I/Q byte-size sample files. - Minor bug fixes, updated documentation and code cleaning.   ## [GNSS-SDR v0.0.4](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.4) - 2014-09-08 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.11628.svg)](https://doi.org/10.5281/zenodo.11628) This release has several improvements and bug fixes: - Added hybrid processing GPS L1 C/A and Galileo E1B, providing position fixes make use of observables for both constellations. - Added implementations of the QuickSync algorithm for GPS L1 C/A and Galileo E1 acquisition. - Added processing blocks for Galileo E5a: Acquisition, Tracking, Telemetry_Decoder (experimental) - New configuration files allow to configure GPS and Galileo channels in the same receiver. - Added tropospheric corrections to GPS and Galileo PVT solution. - Improved precision obtained by changing some variables from float to double. - New building options: `ENABLE_GN3S`, `ENABLE_RTLSDR`, `ENABLE_ARRAY`, and `ENABLE_OPENCL`. - Improved documentation on how to enable optional drivers. - Fixed bug in memory alignment that caused problems with high data rates. - Added `ENABLE_GENERIC_ARCH`, an option to build the binary without detecting the SIMD instruction set present in the compiling machine, so it can be executed in other machines without those specific sets. - Added `ENABLE_GPERFTOOLS`, which links the executable to tcmalloc and profiler if Gperftools is available on the system. - Added carrier phase, Doppler shift and signal strength observables to the RINEX files. Static PPP solutions are available for GPS with RTKLIB via RINEX files. - The executable now produces RINEX files version 3.02 of Galileo Observables, Navigation data, and mixed (GPS/Galileo) observables and nav data. RINEX 3.02 is the default version of RINEX files. - Armadillo version updated to 4.400.2 - Armadillo now uses OpenBLAS instead of BLAS if the former is available on the system. - Some raw pointers have been changed to smart pointers. - Minor bug fixes and code cleaning.   ## [GNSS-SDR v0.0.3](https://github.com/gnss-sdr/gnss-sdr/releases/tag/v0.0.3) - 2014-06-30 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10708.svg)](https://doi.org/10.5281/zenodo.10708) This release has several improvements and bug fixes, completing the transition from Subversion to Git. The main changes are: - Created some missing directories lost in the SVN to Git transition. - New C++11-ized block factory, flow graph and tests, resulting in better memory management and fewer segmentation faults. Several raw pointers converted to smart pointers. - Reorganization of assistance data input and output. - Fixed memory leak when talking to SUPL servers. - Improved retrieval of assistance data. - Fixing an error in a constant value related to Galileo. - Inform users if the temporal folder is not /tmp. - Fixes and additions to the documentation. - README in markdown language so it looks better in Git repositories. - Fixed a bug that prevented the update of all shared map structures (ephemeris, iono parameters, etc…). - The configuration script now throws error if GCC is older than 4.7 or Boost is older than 1.45 - Improved detection / downloading & building if missing of Gflags and Glog. - Improved detection / downloading & building if missing of Armadillo and related dependencies. - Fixes many warnings that appeared when using CMake 3.0. - Improved detection of GTEST_DIR variable. - Include header files in libraries so IDEs such as Xcode can display them. Enjoy it! gnss-sdr-0.0.20/docs/doxygen/000077500000000000000000000000001477325711200157475ustar00rootroot00000000000000gnss-sdr-0.0.20/docs/doxygen/Doxyfile.in000066400000000000000000003426731477325711200201010ustar00rootroot00000000000000# Doxyfile 1.9.3 # # SPDX-FileCopyrightText: 2011-2021 Carles Fernandez-Prades # SPDX-License-Identifier: GPL-3.0-or-later # # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the configuration # file that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = GNSS-SDR # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = @VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "An Open Source GNSS Software Defined Receiver" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. PROJECT_LOGO = @top_srcdir@/docs/doxygen/images/gnss-sdr_logo_round.png # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = @top_builddir@/docs # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. # The default value is: NO. CREATE_SUBDIRS = NO # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = YES # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = NO # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = @PROJECT_SOURCE_DIR@ # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line # such as # /*************** # as being the beginning of a Javadoc-style comment "banner". If set to NO, the # Javadoc-style will behave just like regular comments and it will not be # interpreted by doxygen. # The default value is: NO. JAVADOC_BANNER = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = YES # By default Python docstrings are displayed as preformatted text and doxygen's # special commands cannot be used. By setting PYTHON_DOCSTRING to NO the # doxygen's special commands can be used and the contents of the docstring # documentation blocks is shown as doxygen documentation. # The default value is: YES. PYTHON_DOCSTRING = YES # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". Note that you cannot put \n's in the value part of an alias # to insert newlines (in the resulting output). You can put ^^ in the value part # of an alias to insert a newline as if a physical newline was in the original # file. When you need a literal { or } or , in the value part of an alias you # have to escape them by means of a backslash (\), this can lead to conflicts # with the commands \{ and \} for these it is advised to use the version @{ and # @} or use a double escape (\\{ and \\}) ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice # sources only. Doxygen will then generate output that is more tailored for that # language. For instance, namespaces will be presented as modules, types will be # separated into more groups, etc. # The default value is: NO. OPTIMIZE_OUTPUT_SLICE = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, # Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, # VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files). For instance to make doxygen treat .inc files # as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. When specifying no_extension you should add # * to the FILE_PATTERNS. # # Note see also the list of default file extension mappings. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. # Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 5 # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # If one adds a struct or class to a group and this option is enabled, then also # any nested class or struct is added to the same group. By default this option # is disabled and one has to add nested compounds explicitly via \ingroup. # The default value is: NO. GROUP_NESTED_COMPOUNDS = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 # The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use # during processing. When set to 0 doxygen will based this on the number of # cores available in the system. You can set it explicitly to a value larger # than 0 to get more control over the balance between CPU load and processing # speed. At this moment only the input processing can be done using multiple # threads. Since this is still an experimental feature the default is set to 1, # which effectively disables parallel processing. Please report any issues you # encounter. Generating dot graphs in parallel is controlled by the # DOT_NUM_THREADS setting. # Minimum value: 0, maximum value: 32, default value: 1. NUM_PROC_THREADS = 1 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual # methods of a class will be included in the documentation. # The default value is: NO. EXTRACT_PRIV_VIRTUAL = NO # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If this flag is set to YES, the name of an unnamed parameter in a declaration # will be determined by the corresponding definition. By default unnamed # parameters remain unnamed in the output. # The default value is: YES. RESOLVE_UNNAMED_PARAMS = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option # has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # declarations. If set to NO, these declarations will be included in the # documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # With the correct setting of option CASE_SENSE_NAMES doxygen will better be # able to match the capabilities of the underlying filesystem. In case the # filesystem is case sensitive (i.e. it supports files in the same directory # whose names only differ in casing), the option must be set to YES to properly # deal with such files in case they appear in the input. For filesystems that # are not case sensitive the option should be be set to NO to properly deal with # output files written for symbols that only differ in casing, such as for two # classes, one named CLASS and the other named Class, and to also support # references to files without having to specify the exact matching casing. On # Windows (including Cygwin) and MacOS, users should typically set this option # to NO, whereas on Linux or other Unix flavors it should typically be set to # YES. # The default value is: system dependent. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. HIDE_COMPOUND_REFERENCE= NO # If the SHOW_HEADERFILE tag is set to YES then the documentation for a class # will show which file needs to be included to use the class. # The default value is: YES. SHOW_HEADERFILE = YES # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. See also section "Changing the # layout of pages" for information. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as documenting some parameters in # a documented function twice, or documenting parameters that don't exist or # using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete # function parameter documentation. If set to NO, doxygen will accept that some # parameters have no documentation without warning. # The default value is: YES. WARN_IF_INCOMPLETE_DOC = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong parameter # documentation, but not about the absence of documentation. If EXTRACT_ALL is # set to YES then this flag will automatically be disabled. See also # WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the doxygen process doxygen will return with a non-zero status. # Possible values are: NO, YES and FAIL_ON_WARNINGS. # The default value is: NO. WARN_AS_ERROR = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). In case the file specified cannot be opened for writing the # warning and error messages are written to standard error. When as file - is # specified the warning and error messages are written to standard output # (stdout). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = @top_srcdir@/src \ @top_srcdir@/docs/doxygen/other # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: # https://www.gnu.org/software/libiconv/) for the list of possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, # *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C # comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, # *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.h \ *.dox # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = @top_srcdir@/docs/html \ @top_srcdir@/docs/latex \ @top_srcdir@/cmake \ @top_srcdir@/data \ @top_srcdir@/src/core/libs/supl \ @top_srcdir@/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # ANamespace::AClass, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = @top_srcdir@/docs/doxygen/images/ # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = NO # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a color-wheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to YES can help to show when doxygen was last run and thus if the # documentation is up to date. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML # page. Disable this option to support browsers that do not have JavaScript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_MENUS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: # https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To # create a documentation set, doxygen will generate a Makefile in the HTML # output directory. Running make will produce the docset in that directory and # running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag determines the URL of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDURL = # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.gnss-sdr.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.gnss-sdr.CTTC # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = CTTC # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # on Windows. In the beginning of 2021 Microsoft took the original page, with # a.o. the download links, offline the HTML help workshop was already many years # in maintenance mode). You can download the HTML help workshop from the web # archives at Installation executable (see: # http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo # ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location (absolute path # including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to # run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.gnss-sdr.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine tune the look of the index (see "Fine-tuning the output"). As an # example, the default style sheet generated by doxygen has an example that # shows how to put an image at the root of the tree instead of the PROJECT_NAME. # Since the tree basically has the same information as the tab index, you could # consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO # When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the # FULL_SIDEBAR option determines if the side bar is limited to only the treeview # area (value NO) or if it should extend to the full height of the window (value # YES). Setting this to YES gives a layout similar to # https://docs.readthedocs.io with more room for contents, but less room for the # project logo, title, and description. If either GENERATE_TREEVIEW or # DISABLE_INDEX is set to NO, this option has no effect. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. FULL_SIDEBAR = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email # addresses. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. OBFUSCATE_EMAILS = YES # If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for # the HTML output. These images will generally look nicer at scaled resolutions. # Possible values are: png (the default) and svg (looks nicer but requires the # pdf2svg or inkscape tool). # The default value is: png. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FORMULA_FORMAT = png # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANSPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # # Note that when changing this option you need to delete any form_*.png files in # the HTML output directory before the changes have effect. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. FORMULA_MACROFILE = # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = @GNSSSDR_USE_MATHJAX@ # With MATHJAX_VERSION it is possible to specify the MathJax version to be used. # Note that the different versions of MathJax have different requirements with # regards to the different settings, so it is possible that also other MathJax # settings have to be changed when switching between the different MathJax # versions. # Possible values are: MathJax_2 and MathJax_3. # The default value is: MathJax_2. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_VERSION = MathJax_2 # When MathJax is enabled you can set the default output format to be used for # the MathJax output. For more details about the output format see MathJax # version 2 (see: # http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 # (see: # http://docs.mathjax.org/en/latest/web/components/output.html). # Possible values are: HTML-CSS (which is slower, but has the best # compatibility. This is the name for Mathjax version 2, for MathJax version 3 # this will be translated into chtml), NativeMML (i.e. MathML. Only supported # for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This # is the name for Mathjax version 3, for MathJax version 2 this will be # translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = SVG # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. The default value is: # - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 # - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = @MATHJAX2_PATH@ # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # for MathJax version 2 (see # https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # For example for MathJax version 3 (see # http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): # MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = TeX/AMSmath \ TeX/AMSsymbols # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: # http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /