Compare commits
3 Commits
master
...
v0.3.2-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cebd2da89f | ||
|
|
73b6ef164f | ||
|
|
b2c7ac8c66 |
34
.classpath
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="src" path="src"/>
|
||||||
|
<classpathentry kind="lib" path="imports/commons-lang3-3.2.1.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/jide-oss-3.5.15.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/jsr80-1.0.1.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/libusb4java-1.2.0-linux-arm.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/libusb4java-1.2.0-linux-x86_64.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/libusb4java-1.2.0-linux-x86.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/libusb4java-1.2.0-osx-x86_64.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/libusb4java-1.2.0-osx-x86.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/libusb4java-1.2.0-windows-x86_64.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/libusb4java-1.2.0-windows-x86.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/miglayout-4.0-swing.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/usb-api-1.0.2.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/usb4java-1.2.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/usb4java-javax-1.2.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="config"/>
|
||||||
|
<classpathentry kind="lib" path="imports/JTransforms-3.0.jar" sourcepath="/home/denny/.m2/repository/com/github/wendykierp/JTransforms/3.0/JTransforms-3.0-sources.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/libusb4java-1.2.0-linux-ppc.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/JLargeArrays-1.2.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/slf4j-api-1.7.7.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/logback-classic-1.1.2.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/logback-core-1.1.2.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/commons-io-2.4.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/jmbe-interface-0.3.2.jar"/>
|
||||||
|
<classpathentry kind="lib" path="imports/tablefilter-swing-5.2.1.jar">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="javadoc_location" value="jar:file:/home/denny/Downloads/tablefilter-swing-5.2.1-javadoc.jar!/"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||||
|
<classpathentry kind="output" path="bin"/>
|
||||||
|
</classpath>
|
||||||
4
.directory
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[Dolphin]
|
||||||
|
Timestamp=2015,9,8,20,39,49
|
||||||
|
Version=3
|
||||||
|
ViewMode=1
|
||||||
38
.github/ISSUE_TEMPLATE/bug-report.md
vendored
@@ -1,38 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug Report
|
|
||||||
about: Create a report to help us improve sdrtrunk
|
|
||||||
title: ''
|
|
||||||
labels: bug
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**sdrtrunk Version**
|
|
||||||
Indicate which sdrtrunk version you are using. Use 'master-branch' if you are running the latest code.
|
|
||||||
|
|
||||||
**Describe the bug**
|
|
||||||
A clear and concise description of what the bug is.
|
|
||||||
|
|
||||||
**To Reproduce**
|
|
||||||
Steps to reproduce the behavior:
|
|
||||||
1. Go to '...'
|
|
||||||
2. Click on '....'
|
|
||||||
3. Scroll down to '....'
|
|
||||||
4. See error
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
**Screenshots**
|
|
||||||
If applicable, add screenshots to help explain your problem.
|
|
||||||
|
|
||||||
**Application Log**
|
|
||||||
If applicable, include either the full application log,or a snippet of the error logging.
|
|
||||||
|
|
||||||
**Desktop (optional - complete the following information):**
|
|
||||||
- OS: [e.g. iOS]
|
|
||||||
- CPU Cores: [e.g. 4 cores]
|
|
||||||
- RAM:[e.g. 16GB]
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context about the problem here.
|
|
||||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,5 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: Support and Questions - How do I XXX? Does it support XXX?
|
|
||||||
url: https://github.com/DSheirer/sdrtrunk/wiki/Support
|
|
||||||
about: Please ask your user questions here -- DO NOT create an issue if you have a user question please!!
|
|
||||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
title: ''
|
|
||||||
labels: feature
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
||||||
34
.github/workflows/gradle.yml
vendored
@@ -1,34 +0,0 @@
|
|||||||
# This workflow uses actions that are not certified by GitHub.
|
|
||||||
# They are provided by a third-party and are governed by
|
|
||||||
# separate terms of service, privacy policy, and support
|
|
||||||
# documentation.
|
|
||||||
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
|
|
||||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
|
|
||||||
|
|
||||||
name: Java CI with Gradle
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ master ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v7
|
|
||||||
- name: Set up JDK 27
|
|
||||||
uses: actions/setup-java@v6
|
|
||||||
with:
|
|
||||||
java-version: '27'
|
|
||||||
distribution: 'liberica'
|
|
||||||
java-package: 'jdk+fx'
|
|
||||||
- name: Set up Gradle
|
|
||||||
uses: gradle/actions/setup-gradle@v6
|
|
||||||
- name: Build with Gradle
|
|
||||||
run: ./gradlew clean build
|
|
||||||
48
.github/workflows/nightly.yml
vendored
@@ -1,48 +0,0 @@
|
|||||||
# Create nightly release for Linux, Mac and Windows using the Linux runner.
|
|
||||||
name: Nightly Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
# Don't run nightly build for pull requests - uncomment to test changes to this action within scope of the PR review
|
|
||||||
# pull_request:
|
|
||||||
# branches: [ master ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
nightly:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v7
|
|
||||||
|
|
||||||
- name: Set up JDK 27
|
|
||||||
uses: actions/setup-java@v6
|
|
||||||
with:
|
|
||||||
# Must match the JDK version downloaded in build.gradle (jdk_download_base) - jlink requires an exact version match
|
|
||||||
java-version: '27.0.0'
|
|
||||||
distribution: 'liberica'
|
|
||||||
java-package: 'jdk+fx'
|
|
||||||
|
|
||||||
- name: Set up Gradle
|
|
||||||
uses: gradle/actions/setup-gradle@v6
|
|
||||||
|
|
||||||
- name: Build Linux and Mac releases with Gradle
|
|
||||||
run: ./gradlew runtimeZipOthers -PprojectVersion=nightly
|
|
||||||
|
|
||||||
- name: Build Windows release with Gradle
|
|
||||||
run: ./gradlew runtimeZipWindows -PprojectVersion=nightly
|
|
||||||
|
|
||||||
- name: Create Build Info file
|
|
||||||
run: |
|
|
||||||
echo -e "ref: $GITHUB_REF \ncommit: $GITHUB_SHA\nbuild: $(date +"%Y-%m-%dT%H:%M:%SZ")" > build/image/build_info.txt
|
|
||||||
|
|
||||||
- name: Add build artifacts to nightly release
|
|
||||||
uses: softprops/action-gh-release@v3
|
|
||||||
with:
|
|
||||||
tag_name: nightly
|
|
||||||
prerelease: true
|
|
||||||
files: |
|
|
||||||
build/image/*.zip
|
|
||||||
build/image/build_info.txt
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
130
.github/workflows/release.yml
vendored
@@ -1,130 +0,0 @@
|
|||||||
# Publishes a release when a version tag is pushed. The tag has to match
|
|
||||||
# projectVersion in gradle.properties with a leading 'v': v0.6.2 for a final
|
|
||||||
# release, or v0.6.2-beta-1 / v0.6.2-alpha-1 for a pre-release.
|
|
||||||
name: Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags: ['v[0-9]+.[0-9]+.[0-9]+*']
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
version: ${{ steps.version.outputs.version }}
|
|
||||||
previous_tag: ${{ steps.previous.outputs.tag }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v7
|
|
||||||
with:
|
|
||||||
# Full history and tags, to find the previous release tag for the release notes
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- id: version
|
|
||||||
run: |
|
|
||||||
expected="v$(sed -n 's/^projectVersion=//p' gradle.properties | tr -d '[:space:]')"
|
|
||||||
if [ "$GITHUB_REF_NAME" != "$expected" ]; then
|
|
||||||
echo "::error::Tag $GITHUB_REF_NAME does not match projectVersion in gradle.properties ($expected)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
# Release notes list the PRs since the previous version tag (never 'nightly'). A final release
|
|
||||||
# starts from the previous final release, so it covers every alpha and beta in between.
|
|
||||||
- id: previous
|
|
||||||
run: |
|
|
||||||
exclude=(--exclude "$GITHUB_REF_NAME")
|
|
||||||
if [[ "$GITHUB_REF_NAME" != *-* ]]; then
|
|
||||||
exclude+=(--exclude '*-*')
|
|
||||||
fi
|
|
||||||
tag="$(git describe --tags --abbrev=0 --match 'v[0-9]*' "${exclude[@]}" HEAD 2>/dev/null || true)"
|
|
||||||
echo "Release notes start from: ${tag:-(GitHub default)}"
|
|
||||||
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Set up JDK 27
|
|
||||||
uses: actions/setup-java@v6
|
|
||||||
with:
|
|
||||||
# Must match the JDK version downloaded in build.gradle (jdk_download_base) - jlink requires an exact version match
|
|
||||||
java-version: '27.0.0'
|
|
||||||
distribution: 'liberica'
|
|
||||||
java-package: 'jdk+fx'
|
|
||||||
|
|
||||||
- name: Set up Gradle
|
|
||||||
uses: gradle/actions/setup-gradle@v6
|
|
||||||
|
|
||||||
- name: Build and test
|
|
||||||
run: ./gradlew clean build --console=plain
|
|
||||||
|
|
||||||
# The runtime plugin can't build Windows and the other platforms in the same invocation.
|
|
||||||
- name: Build Linux and Mac releases
|
|
||||||
run: ./gradlew runtimeZipOthers --console=plain
|
|
||||||
|
|
||||||
- name: Build Windows release
|
|
||||||
run: ./gradlew runtimeZipWindows --console=plain
|
|
||||||
|
|
||||||
- name: Check release zips
|
|
||||||
env:
|
|
||||||
VERSION: ${{ steps.version.outputs.version }}
|
|
||||||
run: |
|
|
||||||
missing=0
|
|
||||||
for platform in linux-aarch64 linux-x86_64 osx-aarch64 osx-x86_64 windows-aarch64 windows-x86_64; do
|
|
||||||
zip="build/image/sdr-trunk-${platform}-v${VERSION}.zip"
|
|
||||||
if [ ! -f "$zip" ]; then
|
|
||||||
echo "::error::Missing $zip"
|
|
||||||
missing=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
ls -l build/image/*.zip
|
|
||||||
exit $missing
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v7
|
|
||||||
with:
|
|
||||||
name: release-zips
|
|
||||||
path: build/image/*.zip
|
|
||||||
if-no-files-found: error
|
|
||||||
retention-days: 7
|
|
||||||
|
|
||||||
publish:
|
|
||||||
needs: build
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
steps:
|
|
||||||
- uses: actions/download-artifact@v8
|
|
||||||
with:
|
|
||||||
name: release-zips
|
|
||||||
path: zips
|
|
||||||
|
|
||||||
# Publishing is split into steps that can all be repeated, so a failed
|
|
||||||
# upload or a re-run finishes the draft left behind rather than failing on
|
|
||||||
# it: gh retries uploads, and a retry of an upload that had in fact
|
|
||||||
# succeeded fails with "ReleaseAsset.name already exists" unless clobbering.
|
|
||||||
- name: Create release
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ github.token }}
|
|
||||||
GH_REPO: ${{ github.repository }}
|
|
||||||
VERSION: ${{ needs.build.outputs.version }}
|
|
||||||
PREVIOUS_TAG: ${{ needs.build.outputs.previous_tag }}
|
|
||||||
run: |
|
|
||||||
(cd zips && sha256sum *.zip > SHA256SUMS)
|
|
||||||
prerelease=()
|
|
||||||
if [[ "$GITHUB_REF_NAME" == *-* ]]; then
|
|
||||||
prerelease=(--prerelease)
|
|
||||||
fi
|
|
||||||
notes_start=()
|
|
||||||
if [ -n "$PREVIOUS_TAG" ]; then
|
|
||||||
notes_start=(--notes-start-tag "$PREVIOUS_TAG")
|
|
||||||
fi
|
|
||||||
if gh release view "$GITHUB_REF_NAME" --json isDraft --jq .isDraft 2>/dev/null | grep -qx false; then
|
|
||||||
echo "::error::Release $GITHUB_REF_NAME is already published"
|
|
||||||
exit 1
|
|
||||||
elif gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1; then
|
|
||||||
echo "Reusing the draft release $GITHUB_REF_NAME"
|
|
||||||
else
|
|
||||||
gh release create "$GITHUB_REF_NAME" --draft "${prerelease[@]}" \
|
|
||||||
--verify-tag --generate-notes "${notes_start[@]}" --title "Version $VERSION"
|
|
||||||
fi
|
|
||||||
gh release upload "$GITHUB_REF_NAME" zips/* --clobber
|
|
||||||
gh release edit "$GITHUB_REF_NAME" --draft=false
|
|
||||||
35
.gitignore
vendored
@@ -1,35 +1,6 @@
|
|||||||
### JetBrains template
|
*.class
|
||||||
.idea/
|
|
||||||
/classes*
|
/classes*
|
||||||
/product*
|
/product*
|
||||||
out/
|
/bin*
|
||||||
.directory
|
.directory
|
||||||
.settings
|
.settings
|
||||||
|
|
||||||
## File-based project format:
|
|
||||||
*.iws
|
|
||||||
*.iml
|
|
||||||
|
|
||||||
# mpeltonen/sbt-idea plugin
|
|
||||||
.idea_modules/
|
|
||||||
|
|
||||||
### Java template
|
|
||||||
*.class
|
|
||||||
*.log
|
|
||||||
# Package Files #
|
|
||||||
#*.jar
|
|
||||||
|
|
||||||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
|
||||||
hs_err_pid*
|
|
||||||
### Gradle template
|
|
||||||
.gradle
|
|
||||||
/build/
|
|
||||||
|
|
||||||
# Ignore Gradle GUI config
|
|
||||||
gradle-app.setting
|
|
||||||
|
|
||||||
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
|
|
||||||
!gradle-wrapper.jar
|
|
||||||
|
|
||||||
# Cache of project
|
|
||||||
.gradletasknamecache
|
|
||||||
9
.idea/codeStyleSettings.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectCodeStyleSettingsManager">
|
||||||
|
<option name="PER_PROJECT_SETTINGS">
|
||||||
|
<value />
|
||||||
|
</option>
|
||||||
|
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default (1)" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
22
.idea/compiler.xml
generated
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CompilerConfiguration">
|
||||||
|
<resourceExtensions />
|
||||||
|
<wildcardResourcePatterns>
|
||||||
|
<entry name="!?*.java" />
|
||||||
|
<entry name="!?*.form" />
|
||||||
|
<entry name="!?*.class" />
|
||||||
|
<entry name="!?*.groovy" />
|
||||||
|
<entry name="!?*.scala" />
|
||||||
|
<entry name="!?*.flex" />
|
||||||
|
<entry name="!?*.kt" />
|
||||||
|
<entry name="!?*.clj" />
|
||||||
|
<entry name="!?*.aj" />
|
||||||
|
</wildcardResourcePatterns>
|
||||||
|
<annotationProcessing>
|
||||||
|
<profile default="true" name="Default" enabled="false">
|
||||||
|
<processorPath useClasspath="true" />
|
||||||
|
</profile>
|
||||||
|
</annotationProcessing>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
9
.idea/copyright/profiles_settings.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<component name="CopyrightManager">
|
||||||
|
<settings default="sdrtrunk">
|
||||||
|
<LanguageOptions name="__TEMPLATE__">
|
||||||
|
<option name="addBlankAfter" value="false" />
|
||||||
|
<option name="separateBefore" value="true" />
|
||||||
|
<option name="separateAfter" value="true" />
|
||||||
|
</LanguageOptions>
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
6
.idea/copyright/sdrtrunk.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<component name="CopyrightManager">
|
||||||
|
<copyright>
|
||||||
|
<option name="myName" value="sdrtrunk" />
|
||||||
|
<option name="notice" value="sdrtrunk Copyright (C) 2014-&#36;today.year Dennis Sheirer This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/> " />
|
||||||
|
</copyright>
|
||||||
|
</component>
|
||||||
18
.idea/dictionaries/denny.xml
generated
@@ -2,40 +2,22 @@
|
|||||||
<dictionary name="denny">
|
<dictionary name="denny">
|
||||||
<words>
|
<words>
|
||||||
<w>bahroo</w>
|
<w>bahroo</w>
|
||||||
<w>baseband</w>
|
|
||||||
<w>basebanded</w>
|
|
||||||
<w>broadcastify</w>
|
<w>broadcastify</w>
|
||||||
<w>cach</w>
|
|
||||||
<w>correlator</w>
|
|
||||||
<w>deinterleave</w>
|
|
||||||
<w>descrambled</w>
|
|
||||||
<w>dibit</w>
|
|
||||||
<w>dinf</w>
|
|
||||||
<w>dqpsk</w>
|
|
||||||
<w>esnid</w>
|
<w>esnid</w>
|
||||||
<w>fleetsync</w>
|
<w>fleetsync</w>
|
||||||
<w>heterdyned</w>
|
|
||||||
<w>heterodynes</w>
|
|
||||||
<w>hytera</w>
|
|
||||||
<w>icecast</w>
|
<w>icecast</w>
|
||||||
<w>ident</w>
|
<w>ident</w>
|
||||||
<w>lcns</w>
|
|
||||||
<w>nutall</w>
|
|
||||||
<w>overflowable</w>
|
<w>overflowable</w>
|
||||||
<w>polyphase</w>
|
<w>polyphase</w>
|
||||||
<w>qpsk</w>
|
|
||||||
<w>remez</w>
|
<w>remez</w>
|
||||||
<w>resampler</w>
|
|
||||||
<w>samplerate</w>
|
<w>samplerate</w>
|
||||||
<w>sdrtrunk</w>
|
<w>sdrtrunk</w>
|
||||||
<w>sheirer</w>
|
<w>sheirer</w>
|
||||||
<w>shoutcast</w>
|
<w>shoutcast</w>
|
||||||
<w>streamable</w>
|
<w>streamable</w>
|
||||||
<w>talkgroup</w>
|
<w>talkgroup</w>
|
||||||
<w>talkgroups</w>
|
|
||||||
<w>tgid</w>
|
<w>tgid</w>
|
||||||
<w>ultravox</w>
|
<w>ultravox</w>
|
||||||
<w>unsynchronized</w>
|
|
||||||
<w>wacn</w>
|
<w>wacn</w>
|
||||||
<w>xtea</w>
|
<w>xtea</w>
|
||||||
</words>
|
</words>
|
||||||
|
|||||||
35
.idea/libraries/imports.xml
generated
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="imports">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/logback-classic-1.1.2.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/usb-api-1.0.2.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/commons-io-2.4.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/commons-lang3-3.2.1.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/tablefilter-swing-5.2.1.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/libusb4java-1.2.0-linux-x86.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/JLargeArrays-1.2.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/libusb4java-1.2.0-linux-ppc.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/libusb4java-1.2.0-windows-x86.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/libusb4java-1.2.0-osx-x86.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/miglayout-4.0-swing.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/libusb4java-1.2.0-windows-x86_64.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/usb4java-1.2.0.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/jide-oss-3.5.15.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/libusb4java-1.2.0-linux-x86_64.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/logback-core-1.1.2.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/usb4java-javax-1.2.0.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/jsr80-1.0.1.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/libusb4java-1.2.0-linux-arm.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/libusb4java-1.2.0-osx-x86_64.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/JTransforms-3.0.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/jmbe-interface-0.3.3.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/java-lame-3.98.4.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/commons-codec-1.9.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/commons-logging-1.2.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/slf4j-api-1.7.21.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/libusb4java-1.2.0-linux-aarch64.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
||||||
20
.idea/libraries/org_asynchttpclient_async_http_client_2_0_18.xml
generated
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="org.asynchttpclient:async-http-client:2.0.18" type="repository">
|
||||||
|
<properties maven-id="org.asynchttpclient:async-http-client:2.0.18" />
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/slf4j-api-1.7.21.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/javassist-3.20.0-GA.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/axis.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/jaxrpc.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/commons-discovery-0.2.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/activation-1.1.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/java-mail-1.4.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/wsdl4j-1.5.1.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/radioreference-14.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/mina-core-2.0.16.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/imports/mina-http-2.0.16.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
||||||
85
.idea/misc.xml
generated
@@ -1,53 +1,44 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
<component name="ClientPropertiesManager">
|
||||||
<component name="FrameworkDetectionExcludesConfiguration">
|
<properties class="javax.swing.AbstractButton">
|
||||||
<file type="web" url="file://$PROJECT_DIR$" />
|
<property name="hideActionText" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JComponent">
|
||||||
|
<property name="html.disable" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JEditorPane">
|
||||||
|
<property name="JEditorPane.w3cLengthUnits" class="java.lang.Boolean" />
|
||||||
|
<property name="JEditorPane.honorDisplayProperties" class="java.lang.Boolean" />
|
||||||
|
<property name="charset" class="java.lang.String" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JList">
|
||||||
|
<property name="List.isFileList" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JPasswordField">
|
||||||
|
<property name="JPasswordField.cutCopyAllowed" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JSlider">
|
||||||
|
<property name="Slider.paintThumbArrowShape" class="java.lang.Boolean" />
|
||||||
|
<property name="JSlider.isFilled" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JTable">
|
||||||
|
<property name="Table.isFileList" class="java.lang.Boolean" />
|
||||||
|
<property name="JTable.autoStartsEdit" class="java.lang.Boolean" />
|
||||||
|
<property name="terminateEditOnFocusLost" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JToolBar">
|
||||||
|
<property name="JToolBar.isRollover" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JTree">
|
||||||
|
<property name="JTree.lineStyle" class="java.lang.String" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.text.JTextComponent">
|
||||||
|
<property name="caretAspectRatio" class="java.lang.Double" />
|
||||||
|
<property name="caretWidth" class="java.lang.Integer" />
|
||||||
|
</properties>
|
||||||
</component>
|
</component>
|
||||||
<component name="NullableNotNullManager">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
<option name="myDefaultNullable" value="org.jetbrains.annotations.Nullable" />
|
|
||||||
<option name="myDefaultNotNull" value="org.jetbrains.annotations.NotNull" />
|
|
||||||
<option name="myOrdered" value="true" />
|
|
||||||
<option name="myNullables">
|
|
||||||
<value>
|
|
||||||
<list size="13">
|
|
||||||
<item index="0" class="java.lang.String" itemvalue="org.jspecify.annotations.Nullable" />
|
|
||||||
<item index="1" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
|
|
||||||
<item index="2" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.Nullable" />
|
|
||||||
<item index="3" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableDecl" />
|
|
||||||
<item index="4" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableType" />
|
|
||||||
<item index="5" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.Nullable" />
|
|
||||||
<item index="6" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
|
|
||||||
<item index="7" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
|
|
||||||
<item index="8" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
|
|
||||||
<item index="9" class="java.lang.String" itemvalue="io.reactivex.annotations.Nullable" />
|
|
||||||
<item index="10" class="java.lang.String" itemvalue="io.reactivex.rxjava3.annotations.Nullable" />
|
|
||||||
<item index="11" class="java.lang.String" itemvalue="org.springframework.lang.Nullable" />
|
|
||||||
<item index="12" class="java.lang.String" itemvalue="jakarta.annotation.Nullable" />
|
|
||||||
</list>
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
<option name="myNotNulls">
|
|
||||||
<value>
|
|
||||||
<list size="13">
|
|
||||||
<item index="0" class="java.lang.String" itemvalue="org.jspecify.annotations.NonNull" />
|
|
||||||
<item index="1" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
|
|
||||||
<item index="2" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.NonNull" />
|
|
||||||
<item index="3" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullDecl" />
|
|
||||||
<item index="4" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullType" />
|
|
||||||
<item index="5" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.NonNull" />
|
|
||||||
<item index="6" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
|
|
||||||
<item index="7" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
|
|
||||||
<item index="8" class="java.lang.String" itemvalue="lombok.NonNull" />
|
|
||||||
<item index="9" class="java.lang.String" itemvalue="io.reactivex.annotations.NonNull" />
|
|
||||||
<item index="10" class="java.lang.String" itemvalue="io.reactivex.rxjava3.annotations.NonNull" />
|
|
||||||
<item index="11" class="java.lang.String" itemvalue="org.springframework.lang.NonNull" />
|
|
||||||
<item index="12" class="java.lang.String" itemvalue="jakarta.annotation.Nonnull" />
|
|
||||||
</list>
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_27_PREVIEW" project-jdk-name="liberica-27" project-jdk-type="JavaSDK">
|
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/sdrtrunk.iml" filepath="$PROJECT_DIR$/sdrtrunk.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
124
.idea/uiDesigner.xml
generated
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Palette2">
|
||||||
|
<group name="Swing">
|
||||||
|
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="Button" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="RadioButton" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="CheckBox" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="Label" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||||
|
<preferred-size width="200" height="200" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||||
|
<preferred-size width="200" height="200" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||||
|
<preferred-size width="-1" height="20" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||||
|
</item>
|
||||||
|
</group>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
23
.project
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>sdrtrunk</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
||||||
12
.settings/org.eclipse.jdt.core.prefs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||||
|
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||||
|
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||||
|
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||||
|
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||||
|
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.source=1.8
|
||||||
38
CHANGELOG
@@ -1,39 +1,5 @@
|
|||||||
0.4.0 20200404
|
|
||||||
- Release includes embedded Java 14 & JavaFX 13 runtime
|
|
||||||
- Adds Polyphase Channelizer with 2x channel oversampling and redesigned source management
|
|
||||||
- Adds P25 Phase 2 decoder
|
|
||||||
- Adds P25 radio identifier aliasing
|
|
||||||
- JMBE library 1.0.4 with support for AMBE tone metadata
|
|
||||||
- New JavaFX User Preferences dialog
|
|
||||||
- HackRF tuner enhanced (sample rates and saturation issues)
|
|
||||||
- Adds support for Airspy mini tuner
|
|
||||||
- Redesigned audio sub-system that uses AudioSegments
|
|
||||||
- USB tuner bus saturation management/monitoring
|
|
||||||
- Bitstream (.bits) recording
|
|
||||||
- MP3 Audio Recording
|
|
||||||
- Numerous bug fixes
|
|
||||||
|
|
||||||
0.3.4 20180418
|
0.3.0-beta1 20170129
|
||||||
- New P25 C4FM decoder that uses Differential QPSK decoder instead of FM demodulation with 4FSK.
|
|
||||||
- Adds channel auto-start and ordering capability with startup dialog allowing user to invoke or bypass channel
|
|
||||||
auto-start. Provides user with more control over startup configuration.
|
|
||||||
- Adds preferred tuner attribute to channel configuration allowing user to select a preferred tuner for the channel
|
|
||||||
|
|
||||||
0.3.3 20171225
|
|
||||||
- Changes build system from ant to gradle. Thanks to: Roman Tsypuk https://github.com/tsypuk
|
|
||||||
- Adds LIST and ID3 metadata to wav audio recordings
|
|
||||||
|
|
||||||
0.3.2 20171105
|
|
||||||
- Resolves issue with tuner frequency adjustments that was causing channel processing
|
|
||||||
to lockup and show persistent 'overflow' state in each channel status
|
|
||||||
- Resolves issue with broadcastify 'mountpoint-in-use' error handling and updates
|
|
||||||
memory usage logging
|
|
||||||
- Resolves issue with Shoutcast 2 login error
|
|
||||||
|
|
||||||
0.3.1 20171009
|
|
||||||
- Resolves Java 9 incompatibility issues
|
|
||||||
|
|
||||||
0.3.0 20170922
|
|
||||||
- REQUIRES: Java 8 (or newer) for compatibility and eventual changeover to JavaFX
|
- REQUIRES: Java 8 (or newer) for compatibility and eventual changeover to JavaFX
|
||||||
- FEATURE: audio streaming - adds capability to stream to multiple remote broadcast
|
- FEATURE: audio streaming - adds capability to stream to multiple remote broadcast
|
||||||
servers (Broadcastify, Icecast v2.3 and v2.4+, and Shoutcast V1 and V2). Each
|
servers (Broadcastify, Icecast v2.3 and v2.4+, and Shoutcast V1 and V2). Each
|
||||||
@@ -68,7 +34,7 @@
|
|||||||
- Updated Baseband (I/Q) recording at 48 kHz
|
- Updated Baseband (I/Q) recording at 48 kHz
|
||||||
- Added Airspy tuner support
|
- Added Airspy tuner support
|
||||||
- New traffic channel pool manager for trunked call following
|
- New traffic channel pool manager for trunked call following
|
||||||
- P25 Decoder for C4FM and LSM with trunked call following and audio
|
- P25 Decoder for C4FM and LSM with trunked call following and audio
|
||||||
decoding via the JMBE library
|
decoding via the JMBE library
|
||||||
- Updated MPT1327 decoder and trunked call following.
|
- Updated MPT1327 decoder and trunked call following.
|
||||||
- Updated spectral and waterfall display with zoom (2-64x) and pan and automatic
|
- Updated spectral and waterfall display with zoom (2-64x) and pan and automatic
|
||||||
|
|||||||
76
README.md
@@ -1,76 +1,10 @@
|
|||||||

|
|
||||||

|
|
||||||
|
|
||||||
# MacOS Tahoe 26.1 Users - Attention:
|
|
||||||
Changes to USB support in Tahoe version 26.x cause sdrtrunk to fail to launch. Do the following to install the latest libusb and create a symbolic link and then use the nightly build which includes an updated usb4java native library for Tahoe with ARM processor. There may still be issue(s) with MacOS accessing your USB SDR tuners.
|
|
||||||
|
|
||||||
```
|
|
||||||
brew install libusb --HEAD
|
|
||||||
cd /opt
|
|
||||||
sudo mkdir local
|
|
||||||
cd local
|
|
||||||
sudo mkdir lib
|
|
||||||
```
|
|
||||||
Next, find where brew installed the libusb library, for example: ```/opt/homebrew/Cellar/libusb/HEAD-9ceaa52/lib/libusb-1.0.0.dylib``` Note: the folder "HEAD-9ceaa52" is the version stamp for HEAD when you installed from it.
|
|
||||||
|
|
||||||
Finally, create a symbolic link from the installed library to the place where usb4java is expecting to find libusb (/opt/local/lib/libusb-1.0.0.dylib)
|
|
||||||
|
|
||||||
```
|
|
||||||
sudo ln -s /opt/homebrew/Cellar/libusb/HEAD-9ceaa52/lib/libusb-1.0.0.dylib /opt/local/lib/libusb-1.0.0.dylib
|
|
||||||
```
|
|
||||||
|
|
||||||
# sdrtrunk
|
# sdrtrunk
|
||||||
A cross-platform java application for decoding, monitoring, recording and streaming trunked mobile and related radio protocols using Software Defined Radios (SDR).
|
A cross-platform java application for decoding, monitoring, recording and streaming trunked mobile and related radio protocols using Software Defined Radios (SDR).
|
||||||
|
|
||||||
* [Help/Wiki Home Page](https://github.com/DSheirer/sdrtrunk/wiki)
|
* [Getting Started](https://github.com/DSheirer/sdrtrunk/wiki/GettingStarted)
|
||||||
* [Getting Started](https://github.com/DSheirer/sdrtrunk/wiki/Getting-Started)
|
* [User's Manual Version 0.3.0](https://github.com/DSheirer/sdrtrunk/wiki/UserManual_Version0.3.0)
|
||||||
* [User's Manual](https://github.com/DSheirer/sdrtrunk/wiki/User-Manual)
|
|
||||||
* [Download](https://github.com/DSheirer/sdrtrunk/releases)
|
* [Download](https://github.com/DSheirer/sdrtrunk/releases)
|
||||||
* [Support](https://github.com/DSheirer/sdrtrunk/wiki/Support)
|
* [Support](https://groups.google.com/forum/#!forum/sdrtrunk)
|
||||||
|
|
||||||

|

|
||||||
**Figure 1:** sdrtrunk Application Screenshot
|
**Figure 1:** sdrtrunk **Version 0.3.0** Application Screenshot
|
||||||
|
|
||||||
## Download the Latest Release
|
|
||||||
All release versions of sdrtrunk are available from the [releases](https://github.com/DSheirer/sdrtrunk/releases) tab.
|
|
||||||
|
|
||||||
* **(alpha)** These versions are under development feature previews and likely to contain bugs and unexpected behavior.
|
|
||||||
* **(beta)** These versions are currently being tested for bugs and functionality prior to final release.
|
|
||||||
* **(final)** These versions have been tested and are the current release version.
|
|
||||||
|
|
||||||
## Download Nightly Software Build
|
|
||||||
The [nightly](https://github.com/DSheirer/sdrtrunk/releases/tag/nightly) release contains current builds of the software
|
|
||||||
for all supported operating systems. This version of the software may contain bugs and may not run correctly. However,
|
|
||||||
it let's you preview the most recent changes and fixes before the next software release. **Always backup your
|
|
||||||
playlist(s) before you use the nightly builds.** Note: the nightly release is updated each time code changes are
|
|
||||||
committed to the code base, so it's not really 'nightly' as much as it is 'current'.
|
|
||||||
|
|
||||||
## Minimum System Requirements
|
|
||||||
* **Operating System:** Windows (~~32 or~~ 64-bit), Linux (~~32 or~~ 64-bit) or Mac (64-bit, 12.x or higher)
|
|
||||||
* **CPU:** 4-core
|
|
||||||
* **RAM:** 8GB or more (preferred). Depending on usage, 4GB may be sufficient.
|
|
||||||
|
|
||||||
## Creating a Release (Maintainers)
|
|
||||||
Releases are built and published automatically by the [Release](.github/workflows/release.yml) GitHub workflow
|
|
||||||
whenever a version tag is pushed to the repository.
|
|
||||||
|
|
||||||
1. Update `projectVersion` in `gradle.properties` to the new version, following the naming convention described in
|
|
||||||
that file (e.g. `0.6.2-alpha-1`, `0.6.2-beta-1` or `0.6.2`).
|
|
||||||
2. Commit and push the change to `master`.
|
|
||||||
3. Create and push a tag that matches the version with a leading `v`:
|
|
||||||
```
|
|
||||||
git tag v0.6.2-beta-1
|
|
||||||
git push origin v0.6.2-beta-1
|
|
||||||
```
|
|
||||||
|
|
||||||
The workflow then:
|
|
||||||
* Verifies that the tag matches `projectVersion` in `gradle.properties` and fails if it does not.
|
|
||||||
* Builds and tests the code, then creates the release zips for Linux, Mac and Windows (x86-64 and aarch64).
|
|
||||||
* Creates a GitHub release titled `Version <version>` with auto-generated release notes (a "What's Changed" list of
|
|
||||||
the PRs merged since the previous version tag), and attaches the six zip
|
|
||||||
files plus a `SHA256SUMS` checksum file.
|
|
||||||
* Marks tags containing a dash (alpha and beta versions) as pre-releases. Tags without a dash become full releases.
|
|
||||||
|
|
||||||
If the workflow fails part way through, fix the problem and re-run it from the Actions tab. It resumes from the
|
|
||||||
draft release left behind. It won't modify a release that has already been published. To rebuild a published
|
|
||||||
release, delete the release and the tag on GitHub, then push the tag again.
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
/* ....Show License.... */
|
/* ....Show License.... */
|
||||||
.chart {
|
.chart {
|
||||||
-fx-background-image: url("/../resources/images/Curve-fitted-background.png");
|
-fx-background-image: url("../../../../images/Curve-fitted-background.png");
|
||||||
-fx-padding: 15 25 15 15;
|
-fx-padding: 15 25 15 15;
|
||||||
}
|
}
|
||||||
.chart-plot-background {
|
.chart-plot-background {
|
||||||
-fx-background-color: red;
|
-fx-background-color: red;
|
||||||
-fx-background-image: url("/../resources/images/Curve-fitted-chart-background.png"),
|
-fx-background-image: url("../../../../images/Curve-fitted-chart-background.png"),
|
||||||
url("/../resources/images/Curve-fitted-graph-gridlines.png");
|
url("../../../../images/Curve-fitted-graph-gridlines.png");
|
||||||
-fx-background-size: cover, auto;
|
-fx-background-size: cover, auto;
|
||||||
-fx-background-repeat: no-repeat, repeat;
|
-fx-background-repeat: no-repeat, repeat;
|
||||||
-fx-background-position: 0% 0%, 0% 100%;
|
-fx-background-position: 0% 0%, 0% 100%;
|
||||||
490
build.gradle
@@ -1,490 +0,0 @@
|
|||||||
/*
|
|
||||||
* *****************************************************************************
|
|
||||||
* Copyright (C) 2014-2026 Dennis Sheirer
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
* ****************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
import org.beryx.runtime.RuntimeZipTask
|
|
||||||
import org.gradle.internal.jvm.Jvm
|
|
||||||
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instructions for building/compiling the sdrtrunk application.
|
|
||||||
*
|
|
||||||
* Prerequisites:
|
|
||||||
* Install and configure an OpenJDK version 27+ that includes the JavaFX modules (e.g. Bellsoft Liberica JDK)
|
|
||||||
* - Optional: install and configure Gradle 9.8+
|
|
||||||
*
|
|
||||||
* Scenario 1: run the application via gradle command line from the source code root directory:
|
|
||||||
* command: ./gradlew run
|
|
||||||
*
|
|
||||||
* Scenario 2: create an application release for the current operating system
|
|
||||||
* command: ./gradlew runtimeZipCurrent
|
|
||||||
* Note: release image is located in the /build/image/ directory
|
|
||||||
*
|
|
||||||
* Scenario 3: create releases for Linux and OSX operating systems using downloaded JDKs
|
|
||||||
* command: ./gradlew runtimeZipOthers
|
|
||||||
* Note: release images are located in the /build/image/ directory
|
|
||||||
*
|
|
||||||
* Scenario 4: create release for Windows operating system using downloaded JDK
|
|
||||||
* command: ./gradlew runtimeZipWindows
|
|
||||||
* Note: release image is located in the /build/image/ directory
|
|
||||||
*/
|
|
||||||
plugins {
|
|
||||||
id 'application'
|
|
||||||
id 'java'
|
|
||||||
id 'idea'
|
|
||||||
id 'org.beryx.runtime' version '2.0.1'
|
|
||||||
}
|
|
||||||
|
|
||||||
//Version is defined in gradle.properties so that we can CLI override it for nightly builds.
|
|
||||||
version = project.findProperty('projectVersion')
|
|
||||||
|
|
||||||
//Java 27 is required for this version of the Project Panama preview/incubator feature
|
|
||||||
java {
|
|
||||||
toolchain {
|
|
||||||
languageVersion = JavaLanguageVersion.of(27)
|
|
||||||
vendor = JvmVendorSpec.BELLSOFT
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verifies that the selected toolchain JDK includes the JavaFX modules (e.g. Bellsoft Liberica 'Full JDK').
|
|
||||||
*
|
|
||||||
* Gradle's toolchain spec can only select by language version, vendor and implementation, so it can't distinguish
|
|
||||||
* between the Liberica JDK packages that do and don't bundle JavaFX. This task fails the build with a clear message
|
|
||||||
* instead of allowing compilation to fail with missing javafx packages.
|
|
||||||
*/
|
|
||||||
tasks.register('verifyToolchainJavaFx') {
|
|
||||||
def jdkHome = javaToolchains.launcherFor(java.toolchain).map { it.metadata.installationPath.asFile }
|
|
||||||
|
|
||||||
doLast {
|
|
||||||
def release = new File(jdkHome.get(), 'release')
|
|
||||||
|
|
||||||
if(!release.exists() || !release.text.contains('javafx.base')) {
|
|
||||||
throw new GradleException("The JDK at [${jdkHome.get()}] does not include the JavaFX modules. Install " +
|
|
||||||
"the Bellsoft Liberica JDK 27 'Full' package (includes LibericaFX), or use " +
|
|
||||||
"-Porg.gradle.java.installations.paths=<jdk path> to specify the JDK that Gradle should use.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.named('compileJava') {
|
|
||||||
dependsOn 'verifyToolchainJavaFx'
|
|
||||||
}
|
|
||||||
|
|
||||||
test {
|
|
||||||
useJUnitPlatform()
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
|
|
||||||
// JUnit Tests
|
|
||||||
testImplementation(platform("org.junit:junit-bom:6.1.3"))
|
|
||||||
testImplementation 'org.junit.jupiter:junit-jupiter-api'
|
|
||||||
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
|
|
||||||
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
|
|
||||||
|
|
||||||
//Jitpack imports
|
|
||||||
implementation 'com.github.dnault:libresample4j:master'
|
|
||||||
implementation 'com.github.DSheirer.jmbe:api:v2.1.1'
|
|
||||||
implementation 'com.github.nwaldispuehl:java-lame:v3.98.4'
|
|
||||||
|
|
||||||
//mavenCentral/jcenter imports
|
|
||||||
implementation 'ch.qos.logback:logback-classic:1.6.6'
|
|
||||||
implementation 'ch.qos.logback:logback-core:1.6.6'
|
|
||||||
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.23.0'
|
|
||||||
implementation 'com.formdev:flatlaf:3.8'
|
|
||||||
implementation 'com.formdev:flatlaf-intellij-themes:3.8' //Not imported - Theme.java loads these themes by class name
|
|
||||||
implementation 'com.github.jiconfont:jiconfont-font_awesome:4.7.0.1'
|
|
||||||
implementation 'com.github.jiconfont:jiconfont-javafx:1.0.0'
|
|
||||||
implementation 'com.github.jiconfont:jiconfont-swing:1.0.1'
|
|
||||||
implementation('com.github.wendykierp:JTransforms:3.2') {
|
|
||||||
exclude group: 'junit' //JLargeArrays 1.7 declares junit as a compile dependency
|
|
||||||
}
|
|
||||||
implementation 'com.google.code.gson:gson:2.15.0'
|
|
||||||
implementation 'com.google.guava:guava:33.8.0-jre'
|
|
||||||
implementation 'com.jidesoft:jide-oss:3.6.18'
|
|
||||||
implementation 'com.miglayout:miglayout-swing:11.5.2'
|
|
||||||
implementation 'com.mpatric:mp3agic:0.9.1'
|
|
||||||
implementation 'commons-io:commons-io:2.22.0'
|
|
||||||
implementation 'io.github.dsheirer:jairspy:1.0.12.1' //Airspy tuners - GitHub release, see settings.gradle
|
|
||||||
implementation 'io.github.dsheirer:jairspyhf:1.8.1.1' //Airspy HF+ tuners - GitHub release, see settings.gradle
|
|
||||||
implementation 'io.github.dsheirer:jbladerf:2.6.0.1' //bladeRF tuners - GitHub release, see settings.gradle
|
|
||||||
implementation 'io.github.dsheirer:jhackrf:2026.01.3.1' //HackRF tuners - GitHub release, see settings.gradle
|
|
||||||
implementation 'io.github.dsheirer:jlibusb:1.0.30.1' //libusb and USB hotplug for the tuner libraries - GitHub release; not pulled in transitively
|
|
||||||
implementation 'io.github.dsheirer:jhydrasdr:1.1.4.1' //HydraSDR tuners - GitHub release, see settings.gradle
|
|
||||||
implementation 'io.github.dsheirer:jlimesdr:25.1.0.2' //LimeSDR tuners - GitHub release, see settings.gradle
|
|
||||||
implementation 'io.github.dsheirer:jrtl:1.4.0.3' //RTL-SDR tuners - GitHub release, see settings.gradle
|
|
||||||
implementation 'io.github.dsheirer:jsdrplay:3.15.3' //SDRplay RSP tuners - GitHub release, see settings.gradle
|
|
||||||
implementation 'io.github.dsheirer:radio-reference-api:18.0.0'
|
|
||||||
implementation 'org.apache.commons:commons-compress:1.28.0' //Not used directly - overrides the vulnerable 1.21 version from jarchivelib
|
|
||||||
implementation 'org.apache.commons:commons-lang3:3.21.0'
|
|
||||||
implementation 'org.apache.commons:commons-math3:3.6.1'
|
|
||||||
implementation 'org.apache.commons:commons-csv:1.14.1'
|
|
||||||
implementation 'org.apache.mina:mina-core:2.2.10'
|
|
||||||
implementation 'org.apache.mina:mina-http:2.2.10'
|
|
||||||
implementation 'org.controlsfx:controlsfx:11.2.6'
|
|
||||||
implementation 'org.rauschig:jarchivelib:1.2.0'
|
|
||||||
implementation 'org.slf4j:slf4j-api:2.0.20'
|
|
||||||
}
|
|
||||||
|
|
||||||
def os = DefaultNativePlatform.currentOperatingSystem
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is needed for the JDK23+ vector API ... until it moves out of incubation or preview
|
|
||||||
*/
|
|
||||||
tasks.withType(JavaCompile).configureEach {
|
|
||||||
options.compilerArgs.add("--enable-preview") //Project Panama Vector API is still in incubator
|
|
||||||
options.compilerArgs.add("--add-modules=jdk.incubator.vector") //Project Panama Vector API is still in incubator
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* JVM Arguments for running the application on Windows.
|
|
||||||
*/
|
|
||||||
def jvmArgsWindows =
|
|
||||||
['--add-exports=javafx.base/com.sun.javafx.event=ALL-UNNAMED', //Needed for controls-fx.jar
|
|
||||||
'--add-exports=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED', //windows users for JIDE
|
|
||||||
'--add-modules=jdk.incubator.vector', //Project Panama vector API is still in incubator
|
|
||||||
'--enable-preview', //Project Panama Vector API is still in incubator
|
|
||||||
'--enable-native-access=ALL-UNNAMED', //Suppress unsafe warnings for FFM API Foreign Memory calls
|
|
||||||
'--enable-native-access=javafx.graphics', //JDK24 - suppress restricted java.lang.System calls
|
|
||||||
'--sun-misc-unsafe-memory-access=allow'] //JDK24 - suppress sun.misc.Unsafe::allocateMemory warning
|
|
||||||
|
|
||||||
/**
|
|
||||||
* JVM Arguments for running the application on Linux.
|
|
||||||
*/
|
|
||||||
def jvmArgsLinux =
|
|
||||||
['--add-exports=javafx.base/com.sun.javafx.event=ALL-UNNAMED', //Needed for controls-fx.jar
|
|
||||||
'--add-modules=jdk.incubator.vector', //Project Panama vector API is still in incubator
|
|
||||||
'--enable-preview', //Project Panama Vector & Foreign Function APIs remain in incubator
|
|
||||||
'--sun-misc-unsafe-memory-access=allow', //JDK24 - suppress sun.misc.Unsafe::allocateMemory warning
|
|
||||||
'--enable-native-access=javafx.graphics', //JDK24 - suppress restricted java.lang.System calls
|
|
||||||
'--enable-native-access=ALL-UNNAMED'] //Suppress warnings for FFM API native calls (tuner libraries)
|
|
||||||
|
|
||||||
application {
|
|
||||||
mainClass = "io.github.dsheirer.gui.SDRTrunk"
|
|
||||||
|
|
||||||
if(os.isWindows()) {
|
|
||||||
applicationDefaultJvmArgs = jvmArgsWindows
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
applicationDefaultJvmArgs = jvmArgsLinux
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
test {
|
|
||||||
if(os.isWindows()) {
|
|
||||||
jvmArgs = jvmArgsWindows
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
jvmArgs = jvmArgsLinux
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
jar {
|
|
||||||
manifest {
|
|
||||||
attributes (
|
|
||||||
'Implementation-Title' : 'sdrtrunk project',
|
|
||||||
'Implementation-Version' : archiveVersion,
|
|
||||||
'Created-By' : "Gradle ${gradle.gradleVersion}",
|
|
||||||
'Build-Timestamp' : new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").format(new Date()),
|
|
||||||
'Build-JDK' : "${System.properties['java.version']} (${System.properties['java.vendor']} ${System.properties['java.vm.version']}",
|
|
||||||
'Build-OS' : "${System.properties['os.name']} (${System.properties['os.arch']} ${System.properties['os.version']}"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
idea {
|
|
||||||
module {
|
|
||||||
downloadJavadoc = true
|
|
||||||
downloadSources = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
javadoc {
|
|
||||||
options.addStringOption('-add-modules', 'jdk.incubator.vector')
|
|
||||||
options.addStringOption('Xdoclint:none', '-quiet')
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Runtime target OS and CPU image names. We append version here so that version details are at end of zip filename.
|
|
||||||
*/
|
|
||||||
String targetLinuxAarch64 = 'linux-aarch64-v' + version
|
|
||||||
String targetLinuxX86_64 = 'linux-x86_64-v' + version
|
|
||||||
String targetOsxAarch64 = 'osx-aarch64-v' + version
|
|
||||||
String targetOsxX86_64 = 'osx-x86_64-v' + version
|
|
||||||
String targetWindowsX86_64 = 'windows-x86_64-v' + version
|
|
||||||
String targetWindowsAarch64 = 'windows-aarch64-v' + version
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Download URLs to download the JDK as part of the gradle build packaging process
|
|
||||||
*/
|
|
||||||
def jdk_download_base = "https://download.bell-sw.com/java/27+36/bellsoft-jdk27+36-"
|
|
||||||
def jdk_download_suffix = "-full.tar.gz"
|
|
||||||
def jdk_download_linux_aarch64 = jdk_download_base + "linux-aarch64" + jdk_download_suffix
|
|
||||||
def jdk_download_linux_x86_64 = jdk_download_base + "linux-amd64" + jdk_download_suffix
|
|
||||||
def jdk_download_osx_x86_64 = jdk_download_base + "macos-amd64" + jdk_download_suffix
|
|
||||||
def jdk_download_osx_aarch64 = jdk_download_base + "macos-aarch64" + jdk_download_suffix
|
|
||||||
def jdk_download_windows_x86_64 = jdk_download_base + "windows-amd64-full.zip"
|
|
||||||
def jdk_download_windows_aarch64 = jdk_download_base + "windows-aarch64-full.zip"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Configures the runtime zip task with additional options/settings.
|
|
||||||
* @param rt task to configure
|
|
||||||
* @param jvmArgs to use (windows or linux)
|
|
||||||
* @return configured task.
|
|
||||||
*/
|
|
||||||
def configure(RuntimeZipTask rt, List<String> jvmArgs) {
|
|
||||||
//Use the correct set of JVM arguments
|
|
||||||
rt.extension.launcherData.get().jvmArgs = jvmArgs
|
|
||||||
|
|
||||||
//Additional modules to include with auto-detected modules.
|
|
||||||
//jdk.charsets - NXDN BIG5 encoding support
|
|
||||||
//jdk.crypto.ec - needed for HTTPS connections (broadcastify calls & map tile server)
|
|
||||||
//jdk.incubator.vector - needed for Project Panama foreign function and vector apis
|
|
||||||
//jdk.accessibility is used with assistive technologies like screen readers
|
|
||||||
//java.management for JVM resource monitoring
|
|
||||||
//java.base, java.logging, java.net.http, java.prefs, javafx.controls, javafx.swing - required by sdrtrunk (jdeps)
|
|
||||||
rt.extension.addModules('jdk.charsets', 'jdk.crypto.ec', 'jdk.incubator.vector', 'jdk.accessibility', 'java.management',
|
|
||||||
'java.base', 'java.logging', 'java.net.http', 'java.prefs', 'javafx.controls', 'javafx.swing')
|
|
||||||
|
|
||||||
//Use only the modules listed above. The runtime plugin's module auto-detection uses a bundled ASM library that
|
|
||||||
//can't read Java 27 class files and logs a 'Failed to scan' error for each sdrtrunk class. The jdeps module check
|
|
||||||
//on the runtime task verifies that this list is complete.
|
|
||||||
rt.extension.additive.set(false)
|
|
||||||
|
|
||||||
//Recommended options for reducing/shrinking runtime target image size
|
|
||||||
rt.extension.addOptions('--strip-debug', '--compress', 'zip-6', '--no-header-files', '--no-man-pages')
|
|
||||||
|
|
||||||
//Runtime images have auto appended version in image zip name. Override to include version in single target image.
|
|
||||||
// rt.extension.imageDir=layout.buildDirectory.dir('image')
|
|
||||||
rt.extension.imageZip.set(file(layout.buildDirectory.dir('image').get().file('sdr-trunk.zip')))
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rewrites the jar file without the native library folders for other operating systems and architectures. Fails the
|
|
||||||
* build if a jar that contains native libraries doesn't contain the folder for the target.
|
|
||||||
* @param jar file to rewrite
|
|
||||||
* @param keep native folder for the target
|
|
||||||
* @return number of bytes removed from the jar
|
|
||||||
*/
|
|
||||||
long stripJar(File jar, String keep) {
|
|
||||||
def tunerPattern = ~/^[^\/]+\/native\/([^\/]+)\/.*/
|
|
||||||
def removed = [] as Set
|
|
||||||
def hadTuner = false, keptTuner = false
|
|
||||||
File temp = new File(jar.parentFile, jar.name + '.tmp')
|
|
||||||
|
|
||||||
new java.util.zip.ZipFile(jar).withCloseable { zip ->
|
|
||||||
def entries = zip.entries().toList()
|
|
||||||
|
|
||||||
entries.each { e ->
|
|
||||||
def tuner = tunerPattern.matcher(e.name)
|
|
||||||
|
|
||||||
if(tuner.matches()) {
|
|
||||||
hadTuner = true
|
|
||||||
if(tuner.group(1) == keep) { keptTuner = true } else { removed << e.name }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(hadTuner && !keptTuner) {
|
|
||||||
throw new GradleException("Native strip: ${jar.name} has no native/${keep} folder")
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!removed.isEmpty()) {
|
|
||||||
new java.util.zip.ZipOutputStream(new FileOutputStream(temp)).withCloseable { out ->
|
|
||||||
entries.findAll { !removed.contains(it.name) }.each { e ->
|
|
||||||
def copy = new java.util.zip.ZipEntry(e)
|
|
||||||
if(copy.method == java.util.zip.ZipEntry.DEFLATED) {
|
|
||||||
copy.compressedSize = -1
|
|
||||||
}
|
|
||||||
out.putNextEntry(copy)
|
|
||||||
zip.getInputStream(e).withCloseable { out << it }
|
|
||||||
out.closeEntry()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(removed.isEmpty()) {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
long before = jar.length()
|
|
||||||
java.nio.file.Files.move(temp.toPath(), jar.toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING)
|
|
||||||
return before - jar.length()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes the native libraries for other operating systems and architectures from the jars in each runtime target
|
|
||||||
* image, before the runtimeZip tasks package the images. The tuner libraries (jRTL, jAirspy, etc.) package their
|
|
||||||
* native libraries under '<library>/native/<os>-<arch>/', where the folder name matches the runtime target name
|
|
||||||
* '<os>-<arch>-v<version>' without the version suffix, except that the libraries use 'macos' where the target uses 'osx'.
|
|
||||||
*/
|
|
||||||
tasks.named('runtime') {rt ->
|
|
||||||
rt.doLast {
|
|
||||||
rt.targetPlatforms.get().keySet().each { target ->
|
|
||||||
def nativeFolder = (target - "-v${version}").replaceFirst(/^osx-/, 'macos-')
|
|
||||||
def lib = new File(rt.imageDir.asFile, "${project.name}-${target}/lib")
|
|
||||||
long total = 0
|
|
||||||
lib.listFiles({ File f -> f.name.endsWith('.jar') } as FileFilter).each { jar ->
|
|
||||||
total += stripJar(jar, nativeFolder)
|
|
||||||
}
|
|
||||||
logger.lifecycle("Native strip: removed ${String.format('%.1f', total / 1048576)} MB of other " +
|
|
||||||
"platform native libraries from [${target}]")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verifies that each runtime target image contains every module that the sdrtrunk jar requires, as reported by jdeps.
|
|
||||||
* This guards against the runtime plugin's module auto-detection silently missing modules (e.g. when it can't parse
|
|
||||||
* class files compiled for a newer Java version).
|
|
||||||
*/
|
|
||||||
def jdepsHome = javaToolchains.launcherFor(java.toolchain).map { it.metadata.installationPath.asFile }
|
|
||||||
def mainJar = tasks.named('jar').flatMap { it.archiveFile }
|
|
||||||
|
|
||||||
tasks.named('runtime') {rt ->
|
|
||||||
rt.doLast {
|
|
||||||
def jdeps = new File(jdepsHome.get(), 'bin/' + (os.isWindows() ? 'jdeps.exe' : 'jdeps')).absolutePath
|
|
||||||
def process = new ProcessBuilder(jdeps, '--multi-release', java.toolchain.languageVersion.get().toString(),
|
|
||||||
'--ignore-missing-deps', '--print-module-deps', '-q', mainJar.get().asFile.absolutePath)
|
|
||||||
.redirectErrorStream(true).start()
|
|
||||||
def output = process.inputStream.text.trim()
|
|
||||||
|
|
||||||
if(process.waitFor() != 0) {
|
|
||||||
throw new GradleException("Module check: jdeps failed: ${output}")
|
|
||||||
}
|
|
||||||
|
|
||||||
def required = output.split(',')*.trim().findAll { it } as Set
|
|
||||||
|
|
||||||
rt.targetPlatforms.get().keySet().each { target ->
|
|
||||||
def release = new File(rt.imageDir.asFile, "${project.name}-${target}/release")
|
|
||||||
def match = release.text =~ /(?m)^MODULES="([^"]*)"/
|
|
||||||
|
|
||||||
if(!match.find()) {
|
|
||||||
throw new GradleException("Module check: no MODULES entry in ${release}")
|
|
||||||
}
|
|
||||||
|
|
||||||
def missing = required - (match.group(1).split(' ') as Set)
|
|
||||||
|
|
||||||
if(missing) {
|
|
||||||
throw new GradleException("Module check: runtime image [${target}] is missing required modules " +
|
|
||||||
"${missing.sort()} - add them to addModules() in build.gradle")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
logger.lifecycle("Module check: runtime images contain all modules required by sdrtrunk: ${required.sort()}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a release package for the current operating system.
|
|
||||||
*
|
|
||||||
* Note: you cannot create both Windows and Linux releases at the same time due to limitations of the Runtime plugin
|
|
||||||
*
|
|
||||||
* Usage: gradle runtimeZipCurrent
|
|
||||||
* Usage: gradlew runtimeZipCurrent (windows - using gradlew)
|
|
||||||
* Usage: ./gradlew runtimeZipCurrent (linux - using gradlew)
|
|
||||||
*/
|
|
||||||
tasks.register('runtimeZipCurrent', RuntimeZipTask) {rt ->
|
|
||||||
def arch = System.properties.getProperty("os.arch")
|
|
||||||
def javaHome = Jvm.current().getJavaHome().toString()
|
|
||||||
|
|
||||||
if(os.isWindows()) {
|
|
||||||
if(arch == "amd64") {
|
|
||||||
rt.extension.targetPlatform(targetWindowsX86_64, javaHome)
|
|
||||||
}
|
|
||||||
else if(arch == "aarch64") {
|
|
||||||
rt.extension.targetPlatform(targetWindowsAarch64, javaHome)
|
|
||||||
}
|
|
||||||
configure(rt, jvmArgsWindows)
|
|
||||||
}
|
|
||||||
else if(os.isLinux())
|
|
||||||
{
|
|
||||||
if(arch == "amd64") {
|
|
||||||
rt.extension.targetPlatform(targetLinuxX86_64, javaHome)
|
|
||||||
}
|
|
||||||
else if(arch == "aarch64") {
|
|
||||||
rt.extension.targetPlatform(targetLinuxAarch64, javaHome)
|
|
||||||
}
|
|
||||||
configure(rt, jvmArgsLinux)
|
|
||||||
}
|
|
||||||
else if(os.isMacOsX())
|
|
||||||
{
|
|
||||||
if(arch == "amd64") {
|
|
||||||
rt.extension.targetPlatform(targetOsxX86_64, javaHome)
|
|
||||||
}
|
|
||||||
else if(arch == "aarch64") {
|
|
||||||
rt.extension.targetPlatform(targetOsxAarch64, javaHome)
|
|
||||||
}
|
|
||||||
configure(rt, jvmArgsLinux)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a Windows release package.
|
|
||||||
*
|
|
||||||
* Note: you cannot create both Windows and Linux releases at the same time due to limitations of the Runtime plugin
|
|
||||||
*
|
|
||||||
* Usage: gradle runtimeZipWindows
|
|
||||||
* Usage: gradlew runtimeZipWindows (windows - using gradlew)
|
|
||||||
* Usage: ./gradlew runtimeZipWindows (linux - using gradlew)
|
|
||||||
*/
|
|
||||||
tasks.register('runtimeZipWindows', RuntimeZipTask) {rt ->
|
|
||||||
//Windows aarch64
|
|
||||||
rt.extension.targetPlatform(targetWindowsAarch64) {
|
|
||||||
jdkHome = jdkDownload(jdk_download_windows_aarch64)
|
|
||||||
}
|
|
||||||
//Windows x86-64
|
|
||||||
rt.extension.targetPlatform(targetWindowsX86_64) {
|
|
||||||
jdkHome = jdkDownload(jdk_download_windows_x86_64)
|
|
||||||
}
|
|
||||||
|
|
||||||
configure(rt, jvmArgsWindows)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates Linux & OSX release packages.
|
|
||||||
*
|
|
||||||
* Note: you cannot create both Windows and Linux releases at the same time due to limitations of the Runtime plugin
|
|
||||||
*
|
|
||||||
* Usage: gradle runtimeZipOthers
|
|
||||||
* Usage: gradlew runtimeZipOthers (windows - using gradlew)
|
|
||||||
* Usage: ./gradlew runtimeZipOthers (linux - using gradlew)
|
|
||||||
*/
|
|
||||||
tasks.register('runtimeZipOthers', RuntimeZipTask) {rt ->
|
|
||||||
//Linux aarch64
|
|
||||||
rt.extension.targetPlatform(targetLinuxAarch64) {
|
|
||||||
jdkHome = jdkDownload(jdk_download_linux_aarch64)
|
|
||||||
}
|
|
||||||
//Linux x86-64
|
|
||||||
rt.extension.targetPlatform(targetLinuxX86_64) {
|
|
||||||
jdkHome = jdkDownload(jdk_download_linux_x86_64)
|
|
||||||
}
|
|
||||||
//OSX aarch64
|
|
||||||
rt.extension.targetPlatform(targetOsxAarch64) {
|
|
||||||
jdkHome = jdkDownload(jdk_download_osx_aarch64)
|
|
||||||
}
|
|
||||||
//OSX x86-64
|
|
||||||
rt.extension.targetPlatform(targetOsxX86_64) {
|
|
||||||
jdkHome = jdkDownload(jdk_download_osx_x86_64)
|
|
||||||
}
|
|
||||||
|
|
||||||
configure(rt, jvmArgsLinux)
|
|
||||||
}
|
|
||||||
142
build/build.xml
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
<project name="SDRTrunk" default="SDRTrunk" basedir=".">
|
||||||
|
<description>
|
||||||
|
Ant build script for SDRTrunk Decoder Application
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<!-- version properties -->
|
||||||
|
<property name="major" value="0"/>
|
||||||
|
<property name="minor" value="3"/>
|
||||||
|
<property name="patch" value="2"/>
|
||||||
|
<property name="release" value="-beta1"/>
|
||||||
|
<property name="filename" value="sdrtrunk_${major}.${minor}.${patch}${release}"/>
|
||||||
|
|
||||||
|
<!-- Build properties -->
|
||||||
|
<property name="repo" location=".."/>
|
||||||
|
<property name="source.code" location="${repo}/src"/>
|
||||||
|
<property name="source.configs" location="${repo}/config"/>
|
||||||
|
<property name="source.images" location="${repo}/images"/>
|
||||||
|
<property name="source.libs" location="${repo}/imports"/>
|
||||||
|
<property name="source.scripts" location="${repo}/scripts"/>
|
||||||
|
|
||||||
|
<property name="output" location="${repo}/product"/>
|
||||||
|
<property name="output.classes" location="${repo}/classes"/>
|
||||||
|
<property name="output.folder" location="${output}/sdrtrunk"/>
|
||||||
|
<property name="output.config" location="${output.folder}/config"/>
|
||||||
|
<property name="output.images" location="${output.folder}/images"/>
|
||||||
|
<property name="output.libs" location="${output.folder}/libs"/>
|
||||||
|
|
||||||
|
<path id="classpath">
|
||||||
|
<fileset dir="${source.libs}" includes="*.jar"/>
|
||||||
|
</path>
|
||||||
|
|
||||||
|
<target name="init">
|
||||||
|
<!-- Create the classes folder to contain the compiled java classes -->
|
||||||
|
<mkdir dir="${output.classes}"/>
|
||||||
|
|
||||||
|
<!-- Create version file -->
|
||||||
|
<echo message="${major}.${minor}.${patch}-${release}" file="${output.classes}/sdrtrunk-version"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="compile" depends="clean,init,compile-java-8,compile-java-9"
|
||||||
|
description="Compile java classes" />
|
||||||
|
|
||||||
|
<target name="compile-java-8" depends="check-java-version" if="java.8" description="Compiles code with Java 8 arguments">
|
||||||
|
<echo message="Compiling with Java 8 Options"/>
|
||||||
|
<javac srcdir="${source.code}" destdir="${output.classes}" classpathref="classpath" includeantruntime="false"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="compile-java-9" depends="check-java-version" if="java.9" description="Compiles code with Java 9 arguments">
|
||||||
|
<echo message="Compiling with Java 9 Options"/>
|
||||||
|
<javac srcdir="${source.code}" destdir="${output.classes}" classpathref="classpath" includeantruntime="false">
|
||||||
|
<compilerarg value="--add-modules"/>
|
||||||
|
<compilerarg value="java.xml.bind"/>
|
||||||
|
</javac>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="check-java-version" description="Determines if the compiler is Java 8 or 9">
|
||||||
|
<condition property="java.8" value="true">
|
||||||
|
<contains string="${java.version}" substring="1.8"/>
|
||||||
|
</condition>
|
||||||
|
<condition property="java.9" value="true">
|
||||||
|
<equals arg1="${java.version}" arg2="9"/>
|
||||||
|
</condition>
|
||||||
|
<echo message="Java Version: ${java.version}"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="SDRTrunk" depends="compile" description="Create SDRTrunk application">
|
||||||
|
<!-- Create the distribution directory -->
|
||||||
|
<mkdir dir="${output.folder}"/>
|
||||||
|
|
||||||
|
<!-- Create jar file -->
|
||||||
|
<jar jarfile="${output.folder}/sdrtrunk.jar" basedir="${output.classes}">
|
||||||
|
<manifest>
|
||||||
|
<attribute name="Title" value="sdrtrunk"/>
|
||||||
|
<attribute name="Main-Class" value="gui.SDRTrunk"/>
|
||||||
|
<attribute name="Version" value="${major}.${minor}.${patch}-${release}"/>
|
||||||
|
</manifest>
|
||||||
|
<fileset dir="${source.configs}">
|
||||||
|
<exclude name="*.rules"/>
|
||||||
|
</fileset>
|
||||||
|
|
||||||
|
<fileset dir="${repo}">
|
||||||
|
<include name="LICENSE"/>
|
||||||
|
</fileset>
|
||||||
|
</jar>
|
||||||
|
|
||||||
|
<!-- Copy third-party libraries -->
|
||||||
|
<mkdir dir="${output.libs}"/>
|
||||||
|
<copy todir="${output.libs}">
|
||||||
|
<fileset dir="${source.libs}" includes="*.jar"/>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
<!-- Copy config files -->
|
||||||
|
<mkdir dir="${output.config}"/>
|
||||||
|
|
||||||
|
<copy todir="${output.config}">
|
||||||
|
<fileset dir="${source.configs}">
|
||||||
|
<include name="*.rules"/>
|
||||||
|
</fileset>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
<!-- Copy image files -->
|
||||||
|
<mkdir dir="${output.images}"/>
|
||||||
|
<copy todir="${output.images}">
|
||||||
|
<fileset dir="${source.images}"/>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
<!-- Copy license file -->
|
||||||
|
<copy todir="${output.folder}">
|
||||||
|
<fileset dir="${repo}">
|
||||||
|
<include name="LICENSE"/>
|
||||||
|
</fileset>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
<!-- Copy program scripts -->
|
||||||
|
<copy todir="${output.folder}">
|
||||||
|
<fileset dir="${source.scripts}"/>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Bundle the files into .zip -->
|
||||||
|
<zip destfile="${output}/${filename}.zip" basedir="${output}"/>
|
||||||
|
|
||||||
|
<!-- Remove linux start script before tar task -->
|
||||||
|
<delete file="${output.folder}/run_sdrtrunk_linux.sh"/>
|
||||||
|
|
||||||
|
<!-- Bundle files into .tar.gz and copy/set permissions on linux start script -->
|
||||||
|
<tar destfile="${output}/${filename}.tar.gz" compression="gzip">
|
||||||
|
<tarfileset dir="${output.folder}" prefix="sdrtrunk"/>
|
||||||
|
<tarfileset dir="${source.scripts}" prefix="sdrtrunk" filemode="777">
|
||||||
|
<include name="run_sdrtrunk_linux.sh"/>
|
||||||
|
</tarfileset>
|
||||||
|
</tar>
|
||||||
|
|
||||||
|
<delete dir="${output.folder}"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="clean" description="Clean previous build artifacts">
|
||||||
|
<delete dir="${output.classes}"/>
|
||||||
|
<delete dir="${output}"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
</project>
|
||||||
1
config/javax.usb.properties
Normal file
@@ -0,0 +1 @@
|
|||||||
|
javax.usb.services = org.usb4java.javax.Services
|
||||||
33
config/logback.xml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<configuration>
|
||||||
|
<timestamp key="appstart" datePattern="HHmmss"/>
|
||||||
|
|
||||||
|
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<file>${user.home}/SDRTrunk/logs/sdrtrunk_app.log</file>
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
|
<!-- daily log rollover -->
|
||||||
|
<fileNamePattern>${user.home}/SDRTrunk/logs/%d{yyyyMMdd}_sdrtrunk_app.log</fileNamePattern>
|
||||||
|
<maxHistory>10</maxHistory>
|
||||||
|
</rollingPolicy>
|
||||||
|
<encoder>
|
||||||
|
<pattern>%-25(%d{yyyyMMdd HHmmss.SSS} [%thread]) %-5level %logger{30} - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="DEBUG">
|
||||||
|
<appender-ref ref="FILE" />
|
||||||
|
</root>
|
||||||
|
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%-12(%d{HH:mm:ss.SSS}) %-5level %logger{25} - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="DEBUG">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
|
||||||
|
<!-- Apache Mina TCP/HTTP library -->
|
||||||
|
<logger name="org.apache.mina" level="INFO" />
|
||||||
|
|
||||||
|
</configuration>
|
||||||
92
config/rtl-sdr.rules
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
#
|
||||||
|
# Copyright 2012 Osmocom rtl-sdr project
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
# original RTL2832U vid/pid (hama nano, for example)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2832", MODE:="0666"
|
||||||
|
|
||||||
|
# ezcap EzTV668 (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec Cinergy T Stick Black (rev 1) (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00a9", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec NOXON rev 1 (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b3", MODE:="0666"
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b4", MODE:="0666"
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b7", MODE:="0666"
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c6", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec Cinergy T Stick RC (Rev.3) (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d3", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec T Stick PLUS (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d7", MODE:="0666"
|
||||||
|
|
||||||
|
# Terratec NOXON rev 2 (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00e0", MODE:="0666"
|
||||||
|
|
||||||
|
# Compro Videomate U620F (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0620", MODE:="0666"
|
||||||
|
|
||||||
|
# Compro Videomate U650F (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0650", MODE:="0666"
|
||||||
|
|
||||||
|
# Compro Videomate U680F (E4000)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0680", MODE:="0666"
|
||||||
|
|
||||||
|
# GTek T803 (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="b803", MODE:="0666"
|
||||||
|
|
||||||
|
# Lifeview LV5TDeluxe (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="c803", MODE:="0666"
|
||||||
|
|
||||||
|
# MyGica TD312 (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d286", MODE:="0666"
|
||||||
|
|
||||||
|
# PROlectrix DV107669 (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d803", MODE:="0666"
|
||||||
|
|
||||||
|
# Zaapa ZT-MINDVBZP (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d398", MODE:="0666"
|
||||||
|
|
||||||
|
# Twintech UT-40 (FC0013)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a4", MODE:="0666"
|
||||||
|
|
||||||
|
# Dexatek DK DVB-T Dongle (Logilink VG0002A) (FC2580)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1101", MODE:="0666"
|
||||||
|
|
||||||
|
# Dexatek DK DVB-T Dongle (MSI DigiVox mini II V3.0)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1102", MODE:="0666"
|
||||||
|
|
||||||
|
# Dexatek DK 5217 DVB-T Dongle (FC2580)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1103", MODE:="0666"
|
||||||
|
|
||||||
|
# Genius TVGo DVB-T03 USB dongle (Ver. B)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0458", ATTRS{idProduct}=="707f", MODE:="0666"
|
||||||
|
|
||||||
|
# GIGABYTE GT-U7300 (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d393", MODE:="0666"
|
||||||
|
|
||||||
|
# DIKOM USB-DVBT HD
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d394", MODE:="0666"
|
||||||
|
|
||||||
|
# Peak 102569AGPK (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d395", MODE:="0666"
|
||||||
|
|
||||||
|
# SVEON STV20 DVB-T USB & FM (FC0012)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d39d", MODE:="0666"
|
||||||
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
******************************************************************************
|
|
||||||
Copyright (C) 2014-${today.year} Dennis Sheirer
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
*****************************************************************************
|
|
||||||
17
copyright_header.txt
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* SDR Trunk
|
||||||
|
* Copyright (C) 2014-2016 Dennis Sheirer
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
******************************************************************************/
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
#
|
|
||||||
# ******************************************************************************
|
|
||||||
# Copyright (C) 2014-2026 Dennis Sheirer
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
# *****************************************************************************
|
|
||||||
#
|
|
||||||
|
|
||||||
# Version naming conventions:
|
|
||||||
# Alpha: maj.min.patch-alpha-build
|
|
||||||
# Beta: maj.min.patch-beta-build
|
|
||||||
# Release: maj.min.patch
|
|
||||||
#
|
|
||||||
# Example: 0.6.0-beta-5
|
|
||||||
#
|
|
||||||
# Note: this is so that the file names for the resultant release build products match the GitLab release asset
|
|
||||||
# tag name, specifically the dashes inserted before and after the alpha/beta labels.
|
|
||||||
# See: https://github.com/DSheirer/sdrtrunk/issues/1651
|
|
||||||
|
|
||||||
projectVersion=1.0.0-beta-1
|
|
||||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
9
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,9 +0,0 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
|
||||||
distributionPath=wrapper/dists
|
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.9.0-bin.zip
|
|
||||||
networkTimeout=10000
|
|
||||||
retries=0
|
|
||||||
retryBackOffMs=500
|
|
||||||
validateDistributionUrl=true
|
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
|
||||||
zipStorePath=wrapper/dists
|
|
||||||
248
gradlew
vendored
@@ -1,248 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright © 2015 the original authors.
|
|
||||||
#
|
|
||||||
# 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
|
|
||||||
#
|
|
||||||
# https://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.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
|
||||||
#
|
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# gradlew start up script for POSIX generated by Gradle.
|
|
||||||
#
|
|
||||||
# Important for running:
|
|
||||||
#
|
|
||||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
|
||||||
# noncompliant, but you have some other compliant shell such as ksh or
|
|
||||||
# bash, then to run this script, type that shell name before the whole
|
|
||||||
# command line, like:
|
|
||||||
#
|
|
||||||
# ksh gradlew
|
|
||||||
#
|
|
||||||
# Busybox and similar reduced shells will NOT work, because this script
|
|
||||||
# requires all of these POSIX shell features:
|
|
||||||
# * functions;
|
|
||||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
|
||||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
|
||||||
# * compound commands having a testable exit status, especially «case»;
|
|
||||||
# * various built-in commands including «command», «set», and «ulimit».
|
|
||||||
#
|
|
||||||
# Important for patching:
|
|
||||||
#
|
|
||||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
|
||||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
|
||||||
#
|
|
||||||
# The "traditional" practice of packing multiple parameters into a
|
|
||||||
# space-separated string is a well documented source of bugs and security
|
|
||||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
|
||||||
# options in "$@", and eventually passing that to Java.
|
|
||||||
#
|
|
||||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
|
||||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
|
||||||
# see the in-line comments for details.
|
|
||||||
#
|
|
||||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
|
||||||
# Darwin, MinGW, and NonStop.
|
|
||||||
#
|
|
||||||
# (3) This script is generated from the Groovy template
|
|
||||||
# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
|
||||||
# within the Gradle project.
|
|
||||||
#
|
|
||||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
# Attempt to set APP_HOME
|
|
||||||
|
|
||||||
# Resolve links: $0 may be a link
|
|
||||||
app_path=$0
|
|
||||||
|
|
||||||
# Need this for daisy-chained symlinks.
|
|
||||||
while
|
|
||||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
|
||||||
[ -h "$app_path" ]
|
|
||||||
do
|
|
||||||
ls=$( ls -ld "$app_path" )
|
|
||||||
link=${ls#*' -> '}
|
|
||||||
case $link in #(
|
|
||||||
/*) app_path=$link ;; #(
|
|
||||||
*) app_path=$APP_HOME$link ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# This is normally unused
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
APP_BASE_NAME=${0##*/}
|
|
||||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
|
||||||
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
|
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
|
||||||
MAX_FD=maximum
|
|
||||||
|
|
||||||
warn () {
|
|
||||||
echo "$*"
|
|
||||||
} >&2
|
|
||||||
|
|
||||||
die () {
|
|
||||||
echo
|
|
||||||
echo "$*"
|
|
||||||
echo
|
|
||||||
exit 1
|
|
||||||
} >&2
|
|
||||||
|
|
||||||
# OS specific support (must be 'true' or 'false').
|
|
||||||
cygwin=false
|
|
||||||
msys=false
|
|
||||||
darwin=false
|
|
||||||
nonstop=false
|
|
||||||
case "$( uname )" in #(
|
|
||||||
CYGWIN* ) cygwin=true ;; #(
|
|
||||||
Darwin* ) darwin=true ;; #(
|
|
||||||
MSYS* | MINGW* ) msys=true ;; #(
|
|
||||||
NONSTOP* ) nonstop=true ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Determine the Java command to use to start the JVM.
|
|
||||||
if [ -n "$JAVA_HOME" ] ; then
|
|
||||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
|
||||||
# IBM's JDK on AIX uses strange locations for the executables
|
|
||||||
JAVACMD=$JAVA_HOME/jre/sh/java
|
|
||||||
else
|
|
||||||
JAVACMD=$JAVA_HOME/bin/java
|
|
||||||
fi
|
|
||||||
if [ ! -x "$JAVACMD" ] ; then
|
|
||||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
|
||||||
|
|
||||||
Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
location of your Java installation."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
JAVACMD=java
|
|
||||||
if ! command -v java >/dev/null 2>&1
|
|
||||||
then
|
|
||||||
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
|
||||||
|
|
||||||
Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
location of your Java installation."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Increase the maximum file descriptors if we can.
|
|
||||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
|
||||||
case $MAX_FD in #(
|
|
||||||
max*)
|
|
||||||
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
|
||||||
# shellcheck disable=SC2039,SC3045
|
|
||||||
MAX_FD=$( ulimit -H -n ) ||
|
|
||||||
warn "Could not query maximum file descriptor limit"
|
|
||||||
esac
|
|
||||||
case $MAX_FD in #(
|
|
||||||
'' | soft) :;; #(
|
|
||||||
*)
|
|
||||||
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
|
||||||
# shellcheck disable=SC2039,SC3045
|
|
||||||
ulimit -n "$MAX_FD" ||
|
|
||||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Collect all arguments for the java command, stacking in reverse order:
|
|
||||||
# * args from the command line
|
|
||||||
# * the main class name
|
|
||||||
# * -classpath
|
|
||||||
# * -D...appname settings
|
|
||||||
# * --module-path (only if needed)
|
|
||||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
|
||||||
|
|
||||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
|
||||||
if "$cygwin" || "$msys" ; then
|
|
||||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
|
||||||
|
|
||||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
|
||||||
|
|
||||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
|
||||||
for arg do
|
|
||||||
if
|
|
||||||
case $arg in #(
|
|
||||||
-*) false ;; # don't mess with options #(
|
|
||||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
|
||||||
[ -e "$t" ] ;; #(
|
|
||||||
*) false ;;
|
|
||||||
esac
|
|
||||||
then
|
|
||||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
|
||||||
fi
|
|
||||||
# Roll the args list around exactly as many times as the number of
|
|
||||||
# args, so each arg winds up back in the position where it started, but
|
|
||||||
# possibly modified.
|
|
||||||
#
|
|
||||||
# NB: a `for` loop captures its iteration list before it begins, so
|
|
||||||
# changing the positional parameters here affects neither the number of
|
|
||||||
# iterations, nor the values presented in `arg`.
|
|
||||||
shift # remove old arg
|
|
||||||
set -- "$@" "$arg" # push replacement arg
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
||||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
|
||||||
|
|
||||||
# Collect all arguments for the java command:
|
|
||||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
|
||||||
# and any embedded shellness will be escaped.
|
|
||||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
|
||||||
# treated as '${Hostname}' itself on the command line.
|
|
||||||
|
|
||||||
set -- \
|
|
||||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
|
||||||
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
|
|
||||||
"$@"
|
|
||||||
|
|
||||||
# Stop when "xargs" is not available.
|
|
||||||
if ! command -v xargs >/dev/null 2>&1
|
|
||||||
then
|
|
||||||
die "xargs is not available"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Use "xargs" to parse quoted args.
|
|
||||||
#
|
|
||||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
|
||||||
#
|
|
||||||
# In Bash we could simply go:
|
|
||||||
#
|
|
||||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
|
||||||
# set -- "${ARGS[@]}" "$@"
|
|
||||||
#
|
|
||||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
|
||||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
|
||||||
# character that might be a shell metacharacter, then use eval to reverse
|
|
||||||
# that process (while maintaining the separation between arguments), and wrap
|
|
||||||
# the whole thing up as a single "set" statement.
|
|
||||||
#
|
|
||||||
# This will of course break if any of these variables contains a newline or
|
|
||||||
# an unmatched quote.
|
|
||||||
#
|
|
||||||
|
|
||||||
eval "set -- $(
|
|
||||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
|
||||||
xargs -n1 |
|
|
||||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
|
||||||
tr '\n' ' '
|
|
||||||
)" '"$@"'
|
|
||||||
|
|
||||||
exec "$JAVACMD" "$@"
|
|
||||||
112
gradlew.bat
vendored
@@ -1,112 +0,0 @@
|
|||||||
@rem
|
|
||||||
@rem Copyright 2015 the original author or authors.
|
|
||||||
@rem
|
|
||||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
@rem you may not use this file except in compliance with the License.
|
|
||||||
@rem You may obtain a copy of the License at
|
|
||||||
@rem
|
|
||||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
@rem
|
|
||||||
@rem Unless required by applicable law or agreed to in writing, software
|
|
||||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
@rem See the License for the specific language governing permissions and
|
|
||||||
@rem limitations under the License.
|
|
||||||
@rem
|
|
||||||
@rem SPDX-License-Identifier: Apache-2.0
|
|
||||||
@rem
|
|
||||||
|
|
||||||
@if "%DEBUG%"=="" @echo off
|
|
||||||
@rem ##########################################################################
|
|
||||||
@rem
|
|
||||||
@rem gradlew startup script for Windows
|
|
||||||
@rem
|
|
||||||
@rem ##########################################################################
|
|
||||||
|
|
||||||
@rem Set local scope for the variables, and ensure extensions are enabled
|
|
||||||
setlocal EnableExtensions
|
|
||||||
|
|
||||||
@rem Catch executions from older scripts and ensure they exit cleanly.
|
|
||||||
@rem This can be removed once we can be reasonably confident that few people
|
|
||||||
@rem will be migrating directly to this new wrapper.
|
|
||||||
goto afterSafetyNet
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
goto exitWithErrorLevel
|
|
||||||
:afterSafetyNet
|
|
||||||
|
|
||||||
set DIRNAME=%~dp0
|
|
||||||
if "%DIRNAME%"=="" set DIRNAME=.
|
|
||||||
@rem This is normally unused
|
|
||||||
set APP_BASE_NAME=%~n0
|
|
||||||
set APP_HOME=%DIRNAME%
|
|
||||||
|
|
||||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
|
||||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
|
||||||
|
|
||||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
||||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
|
||||||
|
|
||||||
@rem Find java.exe
|
|
||||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
|
||||||
|
|
||||||
set JAVA_EXE=java.exe
|
|
||||||
%JAVA_EXE% -version >NUL 2>&1
|
|
||||||
if %ERRORLEVEL% equ 0 goto execute
|
|
||||||
|
|
||||||
1>&2 echo.
|
|
||||||
1>&2 echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
|
||||||
1>&2 echo.
|
|
||||||
1>&2 echo Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
1>&2 echo location of your Java installation.
|
|
||||||
|
|
||||||
"%COMSPEC%" /c exit 1
|
|
||||||
goto exitWithErrorLevel
|
|
||||||
|
|
||||||
:findJavaFromJavaHome
|
|
||||||
set JAVA_HOME=%JAVA_HOME:"=%
|
|
||||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
|
||||||
|
|
||||||
if exist "%JAVA_EXE%" goto execute
|
|
||||||
|
|
||||||
1>&2 echo.
|
|
||||||
1>&2 echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
|
||||||
1>&2 echo.
|
|
||||||
1>&2 echo Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
1>&2 echo location of your Java installation.
|
|
||||||
|
|
||||||
"%COMSPEC%" /c exit 1
|
|
||||||
goto exitWithErrorLevel
|
|
||||||
|
|
||||||
:execute
|
|
||||||
@rem Setup the command line
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@rem Execute gradlew
|
|
||||||
@rem endlocal doesn't take effect until after the line is parsed and variables are expanded
|
|
||||||
@rem which allows us to clear the local environment before executing the java command
|
|
||||||
endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel & goto exitWithErrorLevel
|
|
||||||
|
|
||||||
@rem This label must not be changed. We rely on old scripts being able to jump to this point.
|
|
||||||
:exitWithErrorLevel
|
|
||||||
@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts
|
|
||||||
"%COMSPEC%" /c exit %ERRORLEVEL%
|
|
||||||
4
images/.directory
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[Dolphin]
|
||||||
|
PreviewsShown=true
|
||||||
|
Timestamp=2013,9,20,8,54,21
|
||||||
|
Version=3
|
||||||
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 152 B After Width: | Height: | Size: 152 B |
|
Before Width: | Height: | Size: 498 B After Width: | Height: | Size: 498 B |
|
Before Width: | Height: | Size: 522 B After Width: | Height: | Size: 522 B |
|
Before Width: | Height: | Size: 495 B After Width: | Height: | Size: 495 B |
|
Before Width: | Height: | Size: 456 B After Width: | Height: | Size: 456 B |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 504 B After Width: | Height: | Size: 504 B |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 592 B After Width: | Height: | Size: 592 B |
|
Before Width: | Height: | Size: 403 B After Width: | Height: | Size: 403 B |
|
Before Width: | Height: | Size: 654 B After Width: | Height: | Size: 654 B |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 520 B After Width: | Height: | Size: 520 B |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 378 B After Width: | Height: | Size: 378 B |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 379 B After Width: | Height: | Size: 379 B |
|
Before Width: | Height: | Size: 413 B After Width: | Height: | Size: 413 B |
|
Before Width: | Height: | Size: 405 B After Width: | Height: | Size: 405 B |
|
Before Width: | Height: | Size: 435 B After Width: | Height: | Size: 435 B |
|
Before Width: | Height: | Size: 743 B After Width: | Height: | Size: 743 B |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 470 B After Width: | Height: | Size: 470 B |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 493 B After Width: | Height: | Size: 493 B |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 462 B |
|
Before Width: | Height: | Size: 443 B After Width: | Height: | Size: 443 B |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 460 B After Width: | Height: | Size: 460 B |
|
Before Width: | Height: | Size: 644 B After Width: | Height: | Size: 644 B |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
4
imports/.directory
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[Dolphin]
|
||||||
|
Timestamp=2013,4,7,10,12,39
|
||||||
|
Version=3
|
||||||
|
ViewMode=1
|
||||||