Showing with 2,270 additions and 1,480 deletions.
  1. +6 −75 README.md
  2. +6 −6 build.gradle
  3. BIN gradle/wrapper/gradle-wrapper.jar
  4. +2 −1 gradle/wrapper/gradle-wrapper.properties
  5. +14 −4 gradlew
  6. +9 −6 gradlew.bat
  7. +37 −56 src/main/java/io/github/dsheirer/audio/broadcast/AudioStreamingBroadcaster.java
  8. +12 −20 src/main/java/io/github/dsheirer/audio/broadcast/BroadcastModel.java
  9. +11 −11 src/main/java/io/github/dsheirer/audio/broadcast/BroadcastServerType.java
  10. +8 −8 src/main/java/io/github/dsheirer/audio/broadcast/BroadcastState.java
  11. +49 −6 src/main/java/io/github/dsheirer/audio/broadcast/BroadcastStatusPanel.java
  12. +146 −13 src/main/java/io/github/dsheirer/audio/broadcast/icecast/IcecastHTTPAudioBroadcaster.java
  13. +14 −10 src/main/java/io/github/dsheirer/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java
  14. +133 −0 src/main/java/io/github/dsheirer/audio/convert/AudioFrames.java
  15. +1 −1 src/main/java/io/github/dsheirer/audio/convert/ISilenceGenerator.java
  16. +15 −3 src/main/java/io/github/dsheirer/audio/convert/InputAudioFormat.java
  17. +10 −1 src/main/java/io/github/dsheirer/audio/convert/MP3AudioConverter.java
  18. +46 −0 src/main/java/io/github/dsheirer/audio/convert/MP3AudioFrames.java
  19. +2 −0 src/main/java/io/github/dsheirer/audio/convert/MP3FrameInspector.java
  20. +59 −0 src/main/java/io/github/dsheirer/audio/convert/MP3FrameTools.java
  21. +69 −0 src/main/java/io/github/dsheirer/audio/convert/MP3Header.java
  22. +26 −0 src/main/java/io/github/dsheirer/audio/convert/MP3Setting.java
  23. +44 −10 src/main/java/io/github/dsheirer/audio/convert/MP3SilenceGenerator.java
  24. +70 −0 src/main/java/io/github/dsheirer/buffer/AbstractNativeBuffer.java
  25. +44 −0 src/main/java/io/github/dsheirer/buffer/AbstractNativeBufferFactory.java
  26. +10 −13 src/main/java/io/github/dsheirer/buffer/ByteNativeBuffer.java
  27. +2 −2 src/main/java/io/github/dsheirer/buffer/ByteNativeBufferFactory.java
  28. +9 −26 src/main/java/io/github/dsheirer/buffer/FloatNativeBuffer.java
  29. +8 −0 src/main/java/io/github/dsheirer/buffer/INativeBufferFactory.java
  30. +11 −13 src/main/java/io/github/dsheirer/buffer/SignedByteNativeBuffer.java
  31. +2 −2 src/main/java/io/github/dsheirer/buffer/SignedByteNativeBufferFactory.java
  32. +17 −3 src/main/java/io/github/dsheirer/buffer/airspy/AirspyBufferIterator.java
  33. +6 −4 src/main/java/io/github/dsheirer/buffer/airspy/AirspyBufferIteratorScalar.java
  34. +7 −5 src/main/java/io/github/dsheirer/buffer/airspy/AirspyBufferIteratorVector128Bits.java
  35. +7 −5 src/main/java/io/github/dsheirer/buffer/airspy/AirspyBufferIteratorVector256Bits.java
  36. +8 −5 src/main/java/io/github/dsheirer/buffer/airspy/AirspyBufferIteratorVector512Bits.java
  37. +8 −5 src/main/java/io/github/dsheirer/buffer/airspy/AirspyBufferIteratorVector64Bits.java
  38. +5 −3 src/main/java/io/github/dsheirer/buffer/airspy/AirspyInterleavedBufferIteratorScalar.java
  39. +5 −3 src/main/java/io/github/dsheirer/buffer/airspy/AirspyInterleavedBufferIteratorVector128Bits.java
  40. +5 −3 src/main/java/io/github/dsheirer/buffer/airspy/AirspyInterleavedBufferIteratorVector256Bits.java
  41. +5 −3 src/main/java/io/github/dsheirer/buffer/airspy/AirspyInterleavedBufferIteratorVector512Bits.java
  42. +5 −3 src/main/java/io/github/dsheirer/buffer/airspy/AirspyInterleavedBufferIteratorVector64Bits.java
  43. +16 −22 src/main/java/io/github/dsheirer/buffer/airspy/AirspyNativeBuffer.java
  44. +3 −4 src/main/java/io/github/dsheirer/buffer/airspy/AirspyNativeBufferFactory.java
  45. +4 −4 src/main/java/io/github/dsheirer/dsp/filter/channelizer/AbstractComplexPolyphaseChannelizer.java
  46. +6 −6 src/main/java/io/github/dsheirer/dsp/filter/channelizer/ComplexPolyphaseChannelizerM2.java
  47. +27 −164 src/main/java/io/github/dsheirer/dsp/filter/channelizer/PolyphaseChannelManager.java
  48. +117 −64 src/main/java/io/github/dsheirer/dsp/filter/channelizer/PolyphaseChannelSource.java
  49. +58 −0 src/main/java/io/github/dsheirer/dsp/filter/channelizer/SynthesisFilterManager.java
  50. +1 −1 src/main/java/io/github/dsheirer/dsp/filter/channelizer/TwoChannelSynthesizerM2.java
  51. +14 −4 src/main/java/io/github/dsheirer/dsp/filter/channelizer/output/ChannelOutputProcessor.java
  52. +2 −7 src/main/java/io/github/dsheirer/dsp/filter/channelizer/output/IPolyphaseChannelOutputProcessor.java
  53. +2 −1 src/main/java/io/github/dsheirer/dsp/filter/channelizer/output/MixerAssembler.java
  54. +2 −2 src/main/java/io/github/dsheirer/dsp/filter/channelizer/output/OneChannelMixerAssembler.java
  55. +3 −4 src/main/java/io/github/dsheirer/dsp/filter/channelizer/output/OneChannelOutputProcessor.java
  56. +2 −2 src/main/java/io/github/dsheirer/dsp/filter/channelizer/output/SampleAssembler.java
  57. +4 −3 src/main/java/io/github/dsheirer/dsp/filter/channelizer/output/TwoChannelMixerAssembler.java
  58. +3 −4 src/main/java/io/github/dsheirer/dsp/filter/channelizer/output/TwoChannelOutputProcessor.java
  59. +2 −1 src/main/java/io/github/dsheirer/dsp/filter/hilbert/HilbertTransform.java
  60. +0 −248 src/main/java/io/github/dsheirer/dsp/filter/hilbert/LegacyHilbertTransform.java
  61. +7 −7 src/main/java/io/github/dsheirer/dsp/filter/hilbert/ScalarHilbertTransform.java
  62. +4 −3 src/main/java/io/github/dsheirer/dsp/filter/hilbert/VectorHilbertTransform128Bits.java
  63. +4 −3 src/main/java/io/github/dsheirer/dsp/filter/hilbert/VectorHilbertTransform256Bits.java
  64. +5 −5 src/main/java/io/github/dsheirer/dsp/filter/hilbert/VectorHilbertTransform512Bits.java
  65. +4 −3 src/main/java/io/github/dsheirer/dsp/filter/hilbert/VectorHilbertTransform64Bits.java
  66. +4 −3 src/main/java/io/github/dsheirer/dsp/filter/hilbert/VectorHilbertTransformDefaultBits.java
  67. +22 −2 src/main/java/io/github/dsheirer/dsp/gain/complex/ComplexGain.java
  68. +3 −45 src/main/java/io/github/dsheirer/dsp/gain/complex/ComplexGainControl.java
  69. +20 −1 src/main/java/io/github/dsheirer/dsp/gain/complex/IComplexGainControl.java
  70. +21 −2 src/main/java/io/github/dsheirer/dsp/gain/complex/ScalarComplexGain.java
  71. +21 −2 src/main/java/io/github/dsheirer/dsp/gain/complex/VectorComplexGain.java
  72. +21 −2 src/main/java/io/github/dsheirer/dsp/gain/complex/VectorComplexGainControl.java
  73. +5 −6 src/main/java/io/github/dsheirer/dsp/mixer/ComplexMixer.java
  74. +4 −3 src/main/java/io/github/dsheirer/dsp/mixer/ScalarComplexMixer.java
  75. +22 −2 src/main/java/io/github/dsheirer/dsp/mixer/VectorComplexMixer.java
  76. +2 −1 src/main/java/io/github/dsheirer/dsp/oscillator/IComplexOscillator.java
  77. +2 −2 src/main/java/io/github/dsheirer/dsp/oscillator/ScalarComplexOscillator.java
  78. +4 −4 src/main/java/io/github/dsheirer/dsp/oscillator/VectorComplexOscillator.java
  79. +2 −2 src/main/java/io/github/dsheirer/dsp/symbol/BinaryToByteBufferAssembler.java
  80. +2 −2 src/main/java/io/github/dsheirer/dsp/symbol/DibitToByteBufferAssembler.java
  81. +8 −8 src/main/java/io/github/dsheirer/gui/channelizer/SynthesizerViewer.java
  82. +12 −7 src/main/java/io/github/dsheirer/gui/playlist/radioreference/SystemEditor.java
  83. +43 −2 src/main/java/io/github/dsheirer/gui/preference/mp3/MP3PreferenceEditor.java
  84. +22 −21 src/main/java/io/github/dsheirer/icon/IconModel.java
  85. +74 −0 src/main/java/io/github/dsheirer/identifier/tone/ToneIdentifierMessage.java
  86. +4 −5 src/main/java/io/github/dsheirer/module/decode/dmr/DMRDecoder.java
  87. +3 −3 src/main/java/io/github/dsheirer/module/decode/dmr/DMRDecoderInstrumented.java
  88. +53 −19 src/main/java/io/github/dsheirer/module/decode/dmr/audio/DMRAudioModule.java
  89. +22 −23 src/main/java/io/github/dsheirer/module/decode/event/DecodeEventModel.java
  90. +28 −24 src/main/java/io/github/dsheirer/module/decode/event/DecodeEventPanel.java
  91. +56 −16 src/main/java/io/github/dsheirer/module/decode/p25/audio/P25P2AudioModule.java
  92. +16 −20 src/main/java/io/github/dsheirer/module/decode/p25/phase1/P25P1DecoderC4FM.java
  93. +3 −3 src/main/java/io/github/dsheirer/module/decode/p25/phase1/P25P1DecoderC4FMInstrumented.java
  94. +17 −21 src/main/java/io/github/dsheirer/module/decode/p25/phase1/P25P1DecoderLSM.java
  95. +3 −3 src/main/java/io/github/dsheirer/module/decode/p25/phase1/P25P1DecoderLSMInstrumented.java
  96. +2 −3 src/main/java/io/github/dsheirer/module/decode/p25/phase1/P25P1MessageFramer.java
  97. +16 −20 src/main/java/io/github/dsheirer/module/decode/p25/phase2/P25P2DecoderHDQPSK.java
  98. +1 −1 src/main/java/io/github/dsheirer/module/decode/p25/phase2/P25P2DecoderHDQPSKInstrumented.java
  99. +18 −0 src/main/java/io/github/dsheirer/preference/mp3/MP3Preference.java
  100. +5 −5 src/main/java/io/github/dsheirer/record/wave/ComplexSamplesWaveRecorder.java
  101. +6 −6 src/main/java/io/github/dsheirer/sample/SampleUtils.java
  102. +3 −4 src/main/java/io/github/dsheirer/sample/adapter/ComplexShortAdapter.java
  103. +92 −0 src/main/java/io/github/dsheirer/sample/complex/ComplexSampleListenerModule.java
  104. +1 −1 src/main/java/io/github/dsheirer/sample/complex/ComplexSamples.java
  105. +106 −0 src/main/java/io/github/dsheirer/sample/complex/ComplexSamplesNativeBufferAdapter.java
  106. +0 −95 src/main/java/io/github/dsheirer/sample/complex/ComplexSamplesRepackager.java
  107. +1 −1 src/main/java/io/github/dsheirer/sample/complex/InterleavedComplexSamples.java
  108. +7 −6 src/main/java/io/github/dsheirer/source/tuner/airspy/AirspyTunerController.java
  109. +2 −3 src/main/java/io/github/dsheirer/source/tuner/channel/HalfBandTunerChannelSource.java
  110. +5 −4 src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerController.java
  111. +17 −2 src/main/java/io/github/dsheirer/source/tuner/manager/CenterFrequencyCalculator.java
  112. +3 −4 src/main/java/io/github/dsheirer/source/tuner/manager/DiscoveredTuner.java
  113. +9 −6 src/main/java/io/github/dsheirer/source/tuner/rtl/RTL2832TunerController.java
  114. +3 −4 src/main/java/io/github/dsheirer/source/tuner/test/SampleGenerator.java
  115. +86 −29 src/main/java/io/github/dsheirer/source/tuner/usb/USBTunerController.java
  116. +7 −6 src/main/java/io/github/dsheirer/source/wave/ComplexWaveSource.java
  117. +57 −85 src/main/java/io/github/dsheirer/spectrum/WaterfallPanel.java
  118. +36 −28 src/main/java/io/github/dsheirer/util/Dispatcher.java
  119. +7 −5 src/main/java/io/github/dsheirer/vector/calibrate/airspy/AirspyUnpackedCalibration.java
  120. +6 −5 src/main/java/io/github/dsheirer/vector/calibrate/airspy/AirspyUnpackedInterleavedCalibration.java
  121. +2 −2 src/main/java/io/github/dsheirer/vector/calibrate/gain/ComplexGainCalibration.java
  122. +2 −2 src/main/java/io/github/dsheirer/vector/calibrate/gain/ComplexGainControlCalibration.java
  123. +6 −6 src/main/java/io/github/dsheirer/vector/calibrate/hilbert/HilbertCalibration.java
  124. +2 −2 src/main/java/io/github/dsheirer/vector/calibrate/mixer/ComplexMixerCalibration.java
81 changes: 6 additions & 75 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,91 +3,22 @@
# sdrtrunk
A cross-platform java application for decoding, monitoring, recording and streaming trunked mobile and related radio protocols using Software Defined Radios (SDR).

* [Getting Started](https://github.com/DSheirer/sdrtrunk/wiki/GettingStarted_V0.3.0)
* [User's Manual Version 0.3.0 and 0.4.0](https://github.com/DSheirer/sdrtrunk/wiki/UserManual_V0.3.0)
* [Playlist Editor User Manual Version 0.5.0](https://github.com/DSheirer/sdrtrunk/wiki/Playlist-Editor)
* [Getting Started](https://github.com/DSheirer/sdrtrunk/wiki/Getting-Started)
* [User's Manual](https://github.com/DSheirer/sdrtrunk/wiki/User-Manual)
* [Download](https://github.com/DSheirer/sdrtrunk/releases)
* [Support Group](https://groups.google.com/forum/#!forum/sdrtrunk)
* [Discord Support Channel](https://discord.gg/HJQaKYE)
* [Support](https://github.com/DSheirer/sdrtrunk/wiki/Support)

![sdrtrunk Application Overview - Version 0.3.0](https://github.com/DSheirer/sdrtrunk/wiki/v0.3/images/ApplicationOverview_V0.3.0.png)
**Figure 1:** sdrtrunk **Version 0.3.0** Application Screenshot
![sdrtrunk Application](https://github.com/DSheirer/sdrtrunk/wiki/images/sdrtrunk.png)
**Figure 1:** sdrtrunk Application Screenshot

# End User Instructions:

If you simply want to download and run the program, please follow these instructions.

## Download the latest sdrtrunk release for your operating system

## 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.

## Unzip the release

Use 7-zip or any zip utility to unzip the release file

## Start the application

Once unzipped, open a command prompt to where you unzipped the release. Change to the **/bin** directory and use the launch script to start the application:
* **Windows** sdr-trunk.bat
* **Linux/OSX** ./sdr-trunk

## Optional - P25/DMR Audio
If you're using sdrtrunk with a P25 or DMR radio system, you'll need to compile and include the [JMBE](https://github.com/DSheirer/sdrtrunk/wiki/JMBE) digital audio library.

In Version 0.5.0 and higher, the SDRTrunk application has support for building the JMBE library. On the menu, choose **View >> User Preferences** and then click the **Decoder >> JMBE Audio Library** tab.

For versions prior to Version 0.5.0, the [JMBE](https://github.com/DSheirer/sdrtrunk/wiki/JMBE) wiki page contains instructions for downloading the JMBE audio library source code and compiling the JMBE library. Once you have compiled the library, launch the sdrtrunk application. From the menu bar, choose **View >> Preferences**. In the **JMBE Audio Codec** section, update the path to where your compiled JMBE library is located. Any channels that are started after you set the path will be able to produce P25 audio.

## Minimum System Requirements
* **Operating System:** Windows (~~32 or~~ 64-bit), Linux (~~32 or~~ 64-bit) or Mac/Linux (64-bit, 10.14 or higher)
* **CPU:** 4-core
* **RAM:** 8GB or more (preferred). Depending on usage, 4GB may be sufficient.

# Developer Instructions:

If you're interested in modifying and/or compiling the source code, please follow these instructions to use gradle to compile the code.

## Build the project
sdrtrunk uses the gradle build system. This requires **OpenJDK 17** or higher installed on your local computer.

### OpenJDK
There are many vendors producing OpenJDK distributions. A few that I use are:
* [Azul Zulu OpenJDK](https://www.azul.com/downloads/?package=jdk)
* [Bellsoft Liberica OpenJDK](https://bell-sw.com/pages/downloads/#/java-17-lts%20/%20current)
* [SDKMAN](https://sdkman.io/) - Linux Only

Use the gradle wrapper to build the source code:

### Linux
```
./gradlew clean build
```
### Windows
```
gradlew.bat clean build
```

The **/build/distributions** folder will contain the zip file of the compiled program. Unzip it and launch the program from the scripts in the **/bin** directory.

## Run the Application (from Gradle)

### Linux
```
./gradlew clean run
```
### Windows
```
gradlew.bat clean run
```


## Development
All dependencies/versions are controlled from build.gradle.
To change the new release version tag of artifact - change property:
```
version = '0.5.0'
```
12 changes: 6 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ repositories {
maven { url "https://jitpack.io" }
}

version = '0.5.0-beta6'
version = '0.5.0'
sourceCompatibility = '17'

sourceSets {
Expand Down Expand Up @@ -56,10 +56,10 @@ dependencies {
implementation 'com.github.nwaldispuehl:java-lame:v3.98.4'

//mavenCentral/jcenter imports
implementation 'ch.qos.logback:logback-classic:1.4.4'
implementation 'ch.qos.logback:logback-core:1.4.4'
implementation 'ch.qos.logback:logback-classic:1.4.5'
implementation 'ch.qos.logback:logback-core:1.4.5'
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.0'
implementation 'com.fazecast:jSerialComm:2.9.2'
implementation 'com.fazecast:jSerialComm:2.9.3'
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'
Expand All @@ -71,7 +71,7 @@ dependencies {
implementation 'com.mpatric:mp3agic:0.9.1'
implementation 'commons-io:commons-io:2.11.0'
implementation 'eu.hansolo:charts:1.0.5'
implementation 'io.github.dsheirer:radio-reference-api:15.1.8'
implementation 'io.github.dsheirer:radio-reference-api:15.1.9'
implementation 'javax.usb:usb-api:1.0.2'
implementation 'net.coderazzi:tablefilter-swing:5.5.4'
implementation 'org.apache.commons:commons-compress:1.21'
Expand All @@ -82,7 +82,7 @@ dependencies {
implementation 'org.apache.mina:mina-http:2.2.1'
implementation 'org.controlsfx:controlsfx:11.1.2'
implementation 'org.rauschig:jarchivelib:1.2.0'
implementation 'org.slf4j:slf4j-api:2.0.3'
implementation 'org.slf4j:slf4j-api:2.0.5'
implementation 'org.usb4java:libusb4java:1.3.0'
implementation 'org.usb4java:usb4java:1.3.0'
implementation 'org.usb4java:usb4java-javax:1.3.0'
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
3 changes: 2 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-rc-3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
18 changes: 14 additions & 4 deletions gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
Expand All @@ -83,10 +83,10 @@ do
esac
done

APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit

APP_NAME="Gradle"
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit

# 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"'
Expand Down Expand Up @@ -146,12 +146,16 @@ fi
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=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=SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
Expand Down Expand Up @@ -208,6 +212,12 @@ set -- \
org.gradle.wrapper.GradleWrapperMain \
"$@"

# 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.
Expand Down
15 changes: 9 additions & 6 deletions gradlew.bat
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
@rem limitations under the License.
@rem

@if "%DEBUG%" == "" @echo off
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
Expand All @@ -25,7 +25,8 @@
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

Expand All @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
if %ERRORLEVEL% equ 0 goto execute

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Expand Down Expand Up @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
if %ERRORLEVEL% equ 0 goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%

:mainEnd
if "%OS%"=="Windows_NT" endlocal
Expand Down