FT8CN/ft8cn/app/src/main/java/com/bg7yoz/ft8cn/database/OperationBand.java

159 wiersze
4.5 KiB
Java
Czysty Zwykły widok Historia

2023-08-15 04:49:10 +00:00
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.07420m
* @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.txtFT8
*/
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);
}
}
}