kopia lustrzana https://github.com/N0BOY/FT8CN
159 wiersze
4.5 KiB
Java
159 wiersze
4.5 KiB
Java
package com.bg7yoz.ft8cn.database;
|
||
|
||
import android.annotation.SuppressLint;
|
||
import android.content.Context;
|
||
import android.content.res.AssetManager;
|
||
import android.util.Log;
|
||
|
||
import com.bg7yoz.ft8cn.rigs.BaseRigOperation;
|
||
|
||
import java.io.IOException;
|
||
import java.io.InputStream;
|
||
import java.util.ArrayList;
|
||
|
||
/**
|
||
* 用于读取可用的载波波段列表,文件保存在assets/bands.txt中
|
||
* @author BGY70Z
|
||
* @date 2023-03-20
|
||
*/
|
||
|
||
public class OperationBand {
|
||
private static final String TAG="OperationBand";
|
||
private final Context context;
|
||
private static OperationBand operationBand = null;
|
||
|
||
public static long getDefaultBand() {
|
||
return 14074000;
|
||
}
|
||
|
||
public static String getDefaultWaveLength() {
|
||
return "20m";
|
||
}
|
||
|
||
public static ArrayList<Band> bandList = new ArrayList<>();
|
||
public OperationBand(Context context) {
|
||
this.context = context;
|
||
//把波段数据导入到内存
|
||
getBandsFromFile();
|
||
}
|
||
|
||
public static OperationBand getInstance(Context context) {
|
||
if (operationBand == null) {
|
||
operationBand=new OperationBand(context);
|
||
return operationBand;
|
||
} else {
|
||
return operationBand;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取操作波段的数据,以列表的索引值查找,如果没有返回默认值14.074,20m
|
||
* @param index 索引
|
||
* @return
|
||
*/
|
||
public Band getBandByIndex(int index){
|
||
if (index==-1||index>=bandList.size()){
|
||
return new Band(getDefaultBand(),getDefaultWaveLength());
|
||
}else {
|
||
return bandList.get(index);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 检查频率是不是在频率列表中,如果不在,把这个频率加到频段中
|
||
* @param freq
|
||
* @return
|
||
*/
|
||
public static int getIndexByFreq(long freq){
|
||
int result=-1;
|
||
for (int i = 0; i < bandList.size(); i++) {
|
||
if (bandList.get(i).band==freq){
|
||
result=i;
|
||
break;
|
||
}
|
||
}
|
||
if (result==-1){
|
||
bandList.add(new Band(freq, BaseRigOperation.getMeterFromFreq(freq)));
|
||
result=bandList.size()-1;
|
||
}
|
||
return result;
|
||
}
|
||
/**
|
||
* 从bands.txt文件中读出FT8信号列表。
|
||
*/
|
||
public void getBandsFromFile(){
|
||
AssetManager assetManager = context.getAssets();
|
||
try {
|
||
bandList.clear();
|
||
InputStream inputStream= assetManager.open("bands.txt");
|
||
String[] st=getLinesFromInputStream(inputStream,"\n");
|
||
for (int i = 0; i <st.length ; i++) {
|
||
if (!st[i].contains(":")){
|
||
continue;
|
||
}
|
||
bandList.add(new Band(st[i]));
|
||
}
|
||
inputStream.close();
|
||
} catch (IOException e) {
|
||
e.printStackTrace();
|
||
Log.e(TAG, "从波段列表文件提取数据出错:"+e.getMessage() );
|
||
}
|
||
}
|
||
public static String getBandInfo(int index){
|
||
if (index>=bandList.size()){
|
||
return bandList.get(0).getBandInfo();
|
||
}else {
|
||
return bandList.get(index).getBandInfo();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 从InputStream中读出字符串
|
||
* @param inputStream 输入流
|
||
* @param deLimited 每行数据的分隔符。
|
||
* @return String 返回字符串,如果失败,返回null
|
||
*/
|
||
public static String[] getLinesFromInputStream(InputStream inputStream, String deLimited) {
|
||
try {
|
||
byte[] bytes = new byte[inputStream.available()];
|
||
inputStream.read(bytes);
|
||
return (new String(bytes)).split(deLimited);
|
||
}catch (IOException e){
|
||
return null;
|
||
}
|
||
}
|
||
public static long getBandFreq(int index){
|
||
if (index>bandList.size()){
|
||
return 14074000;
|
||
}
|
||
return bandList.get(index).band;
|
||
}
|
||
|
||
public static class Band {
|
||
public long band;
|
||
public String waveLength;
|
||
public boolean marked=false;
|
||
|
||
public Band(long band, String waveLength) {
|
||
this.band = band;
|
||
this.waveLength = waveLength;
|
||
}
|
||
|
||
public Band(String s) {
|
||
String[] info=s.split(":");
|
||
marked= (info[0].equals("*"));
|
||
band=Long.parseLong(info[1]);
|
||
waveLength=info[info.length-1];
|
||
}
|
||
@SuppressLint("DefaultLocale")
|
||
public String getBandInfo(){
|
||
return String.format("%s %.3f MHz (%s)"
|
||
,marked?"*":" "
|
||
,(float)(band/1000000f)
|
||
,waveLength);
|
||
}
|
||
}
|
||
|
||
|
||
}
|