kopia lustrzana https://github.com/N0BOY/FT8CN
Merge branch 'dev' of https://github.com/N0BOY/FT8CN into dev
commit
42e652f679
Plik binarny nie jest wyświetlany.
42
LICENSE
42
LICENSE
|
@ -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.
|
||||
|
|
15
README.md
15
README.md
|
@ -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进行调试。
|
||||
BG8BXM(M哥),为FT8CN的使用做推广,抖音和B站上有很多他的教学视频。
|
||||
BG7MFQ,为FT8CN的使用做推广,帮助测试。
|
||||
```
|
||||
```
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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{
|
||||
|
|
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
|
@ -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());
|
||||
}
|
||||
}
|
Plik binarny nie jest wyświetlany.
|
@ -1,5 +0,0 @@
|
|||
关于音频输出设置
|
||||
|
||||
采样位深:也称采样精度,FT8CN只有16位整型和32位浮点可选。采样位数是表示声音强度量化后的精细程度,它的数值越大,波动幅度的分辨率也就越高,所发出声音的能力越强。
|
||||
|
||||
采样率:也称取样频率, 指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,但占的资源也多。
|
|
@ -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.
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
Ładowanie…
Reference in New Issue