pull/36/head
wangg 2023-05-02 10:53:52 -04:00
commit 42e652f679
502 zmienionych plików z 1216 dodań i 1987 usunięć

Plik binarny nie jest wyświetlany.

42
LICENSE
Wyświetl plik

@ -1,21 +1,21 @@
MIT License
Copyright (c) 2023 BG7YOZ
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
MIT License
Copyright (c) 2023 BG7YOZ
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Wyświetl plik

@ -1,10 +1,9 @@
# FT8CN
Developed by BG7YOZ and hosted by N0BOY
Run FT8 natively on Android
Check [Releases](https://github.com/N0BOY/FT8CN/releases) to download the latest apk file.
# FT8CN
Developed by BG7YOZ and hosted by N0BOY
Run FT8 natively on Android
Check [Releases](https://github.com/N0BOY/FT8CN/releases) to download the latest apk file.
```
免责声明:
@ -62,4 +61,4 @@ BG7YOZ
BH4FTI发现并协助对一些BUG进行调试。
BG8BXMM哥为FT8CN的使用做推广抖音和B站上有很多他的教学视频。
BG7MFQ为FT8CN的使用做推广帮助测试。
```
```

0
ft8CN/.gitignore vendored 100644 → 100755
Wyświetl plik

0
ft8CN/.idea/.gitignore vendored 100644 → 100755
Wyświetl plik

0
ft8CN/.idea/.name 100644 → 100755
Wyświetl plik

4
ft8CN/.idea/compiler.xml 100644 → 100755
Wyświetl plik

@ -1,8 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="11">
<module name="Ft8CN.app" target="1.8" />
</bytecodeTargetLevel>
<bytecodeTargetLevel target="11" />
</component>
</project>

Wyświetl plik

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<targetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\jmsmf\.android\avd\Pixel_XL_API_30.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-05-01T08:38:28.258277700Z" />
</component>
</project>

0
ft8CN/.idea/gradle.xml 100644 → 100755
Wyświetl plik

Wyświetl plik

@ -6,8 +6,5 @@
<option name="m_reportAllNonLibraryCalls" value="false" />
<option name="callCheckString" value="java.io.File,.*,java.io.InputStream,read|skip|available|markSupported,java.io.Reader,read|skip|ready|markSupported,java.lang.AbstractStringBuilder,capacity|codePointAt|codePointBefore|codePointCount|indexOf|lastIndexOf|offsetByCodePoints|substring|subSequence,java.lang.Boolean,.*,java.lang.Byte,.*,java.lang.Character,.*,java.lang.Double,.*,java.lang.Float,.*,java.lang.Integer,.*,java.lang.Long,.*,java.lang.Math,.*,java.lang.Object,equals|hashCode|toString,java.lang.Short,.*,java.lang.StrictMath,.*,java.lang.String,.*,java.lang.Thread,interrupted,java.math.BigDecimal,.*,java.math.BigInteger,.*,java.net.InetAddress,.*,java.net.URI,.*,java.nio.channels.AsynchronousChannelGroup,.*,java.util.Arrays,.*,java.util.Collections,(?!addAll).*,java.util.List,of,java.util.Map,of|ofEntries|entry,java.util.Set,of,java.util.UUID,.*,java.util.concurrent.CountDownLatch,await|getCount,java.util.concurrent.ExecutorService,awaitTermination|isShutdown|isTerminated,java.util.concurrent.ForkJoinPool,awaitQuiescence,java.util.concurrent.Semaphore,tryAcquire|availablePermits|isFair|hasQueuedThreads|getQueueLength|getQueuedThreads,java.util.concurrent.locks.Condition,await|awaitNanos|awaitUntil,java.util.concurrent.locks.Lock,tryLock|newCondition,java.util.regex.Matcher,pattern|toMatchResult|start|end|group|groupCount|matches|find|lookingAt|quoteReplacement|replaceAll|replaceFirst|regionStart|regionEnd|hasTransparentBounds|hasAnchoringBounds|hitEnd|requireEnd,java.util.regex.Pattern,.*,java.util.stream.BaseStream,.*,java.util.stream.DoubleStream,.*,java.util.stream.IntStream,.*,java.util.stream.LongStream,.*,java.util.stream.Stream,.*" />
</inspection_tool>
<inspection_tool class="JavadocDeclaration" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ADDITIONAL_TAGS" value="date" />
</inspection_tool>
</profile>
</component>

7
ft8CN/.idea/misc.xml 100644 → 100755
Wyświetl plik

@ -172,11 +172,4 @@
<component name="ProjectType">
<option name="id" value="Android" />
</component>
<component name="VisualizationToolProject">
<option name="state">
<ProjectState>
<option name="scale" value="0.027632950990615225" />
</ProjectState>
</option>
</component>
</project>

Wyświetl plik

0
ft8CN/app/.gitignore vendored 100644 → 100755
Wyświetl plik

4
ft8CN/app/build.gradle 100644 → 100755
Wyświetl plik

@ -5,7 +5,7 @@ plugins {
id 'com.android.application'
}
def currentTime = getCurrentTime()
def currentTime = getCurrentTime();
static def getCurrentTime() {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd")
@ -22,7 +22,7 @@ android {
minSdk 23
targetSdk 33
versionCode 1
versionName '0.88'
versionName '0.87'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
dataBinding{

BIN
ft8CN/app/libs/arm64-v8a/libft8cn.so 100644 → 100755

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

BIN
ft8CN/app/libs/x86/libft8cn.so 100644 → 100755

Plik binarny nie jest wyświetlany.

BIN
ft8CN/app/libs/x86_64/libft8cn.so 100644 → 100755

Plik binarny nie jest wyświetlany.

0
ft8CN/app/proguard-rules.pro vendored 100644 → 100755
Wyświetl plik

Wyświetl plik

@ -0,0 +1,26 @@
package com.bg7yoz.ft8cn;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.bg7yoz.ft8cn", appContext.getPackageName());
}
}

Wyświetl plik

Wyświetl plik

Wyświetl plik

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -1,5 +0,0 @@
关于音频输出设置
采样位深也称采样精度FT8CN只有16位整型和32位浮点可选。采样位数是表示声音强度量化后的精细程度它的数值越大波动幅度的分辨率也就越高所发出声音的能力越强。
采样率:也称取样频率, 指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,但占的资源也多。

Wyświetl plik

@ -1,5 +0,0 @@
Audio Output Setting
Bit depth: Choose 16-bit int or 32-bit float. Bit depth dictates the number of possible amplitude values of audio sample. A higher bit depth will produce a higher resolution audio.
Sample rate: Sample rate refers to the number of samples that are present within one second of digital audio. Higher sample rate provides more accurate audio waveform, but consume more system resources.

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

0
ft8CN/app/src/main/assets/cty.dat 100644 → 100755
Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

@ -41,7 +41,7 @@ YAESU FT-DX Other series,00,4800,3
KENWOOD(建伍) TK-90,00,9600,5
KENWOOD(建伍) TS-480,00,9600,7
KENWOOD(建伍) TS-590,00,9600,7
KENWOOD(建伍) TS-2000,00,9600,14
KENWOOD(建伍) TS-2000,00,9600,7
KN990,00,38400,1
Elecraft K3S\K3\KX3\KX2,00,38400,10
mcHF-QRP sdr,00,4800,1

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

Wyświetl plik

@ -14,8 +14,6 @@ import com.bg7yoz.ft8cn.connector.ConnectMode;
import com.bg7yoz.ft8cn.database.ControlMode;
import com.bg7yoz.ft8cn.database.DatabaseOpr;
import com.bg7yoz.ft8cn.ft8transmit.QslRecordList;
import com.bg7yoz.ft8cn.html.HtmlContext;
import com.bg7yoz.ft8cn.icom.IcomAudioUdp;
import com.bg7yoz.ft8cn.log.QSLRecord;
import com.bg7yoz.ft8cn.rigs.BaseRigOperation;
import com.bg7yoz.ft8cn.timer.UtcTimer;
@ -35,9 +33,6 @@ public class GeneralVariables {
public static boolean saveSWLMessage=false;//保存解码消息开关
public static boolean saveSWL_QSO=false;//保存解码消息消息中的QSO开关
public static boolean audioOutput32Bit =true;//音频输出类型true=float,false=int16
public static int audioSampleRate=12000;//发射音频的采样率
public static MutableLiveData<Float> mutableVolumePercent = new MutableLiveData<>();
public static float volumePercent = 0.5f;//播放音频的音量,是百分比
@ -548,9 +543,21 @@ public class GeneralVariables {
int order = 0;
for (String key : callsignAndGrids.keySet()) {
order++;
HtmlContext.tableKeyRow(result,order % 2 != 0,key,callsignAndGrids.get(key));
if (order % 2 == 0) {
result.append("<tr class=\"bbb\" >");
} else {
result.append("<tr>");
}
result.append("<td align=center class=\"default\" >");
result.append(key);
result.append("</td>\n");
result.append("<td align=center class=\"default\" >");
result.append(callsignAndGrids.get(key));
result.append("</tr>\n");
}
return result.toString();
}
public static synchronized void deleteArrayListMore(ArrayList<Ft8Message> list) {
@ -575,11 +582,4 @@ public class GeneralVariables {
return false;
}
/**
*
*/
public enum AudioOutputBitMode{
Float32,
Int16
}
}

Wyświetl plik

@ -71,7 +71,6 @@ import com.bg7yoz.ft8cn.rigs.GuoHeQ900Rig;
import com.bg7yoz.ft8cn.rigs.IcomRig;
import com.bg7yoz.ft8cn.rigs.InstructionSet;
import com.bg7yoz.ft8cn.rigs.KenwoodKT90Rig;
import com.bg7yoz.ft8cn.rigs.KenwoodTS2000Rig;
import com.bg7yoz.ft8cn.rigs.KenwoodTS590Rig;
import com.bg7yoz.ft8cn.rigs.OnRigStateChanged;
import com.bg7yoz.ft8cn.rigs.XieGu6100Rig;
@ -367,12 +366,12 @@ public class MainViewModel extends ViewModel {
}
@Override
public void onTransmitByWifi(Ft8Message msg) {
public void onAfterGenerate(float[] data) {
if (GeneralVariables.connectMode == ConnectMode.NETWORK) {
if (baseRig != null) {
if (baseRig.isConnected()) {
sendWaveDataRunnable.baseRig=baseRig;
sendWaveDataRunnable.message=msg;
sendWaveDataRunnable.data=data;
//以线程池的方式执行网络数据包发送
sendWaveDataThreadPool.execute(sendWaveDataRunnable);
}
@ -747,9 +746,6 @@ public class MainViewModel extends ViewModel {
case InstructionSet.XIEGU_6100:
baseRig = new XieGu6100Rig(GeneralVariables.civAddress);//协谷6100
break;
case InstructionSet.KENWOOD_TS2000:
baseRig = new KenwoodTS2000Rig();//建伍TS2000
break;
}
mutableIsFlexRadio.postValue(GeneralVariables.instructionSet==InstructionSet.FLEX_NETWORK);
@ -885,12 +881,11 @@ public class MainViewModel extends ViewModel {
}
private static class SendWaveDataRunnable implements Runnable{
BaseRig baseRig;
//float[] data;
Ft8Message message;
float[] data;
@Override
public void run() {
if (baseRig!=null&&message!=null){
baseRig.sendWaveData(message);//实际生成的数据是12.64+0.04,0.04是生成的0数据
if (baseRig!=null&&data!=null){
baseRig.sendWaveData(data);//实际生成的数据是12.64+0.04,0.04是生成的0数据
}
}
}

Some files were not shown because too many files have changed in this diff Show More